use of org.abs_models.backend.java.lib.runtime.ABSClosure in project abstools by abstools.
the class Cog method setupAPI.
private static void setupAPI() {
thisClass.setName("Cog");
thisClass.addMethod(/*List<Process>*/
"getQueue", new ABSClosure() {
@Override
public ABSValue exec(ABSDynamicObject t, ABSValue... params) {
// TODO
return ABSUnit.UNIT;
}
});
thisClass.addMethod(/*ABSUnit*/
"info", new ABSClosure() {
@Override
public ABSValue exec(ABSDynamicObject t, ABSValue... params) {
COG cog = (COG) t.getFieldValue_Internal("cog");
System.out.println("Cog scheduler " + cog.getScheduler().toString());
if (cog.getScheduler() instanceof SimpleTaskScheduler) {
SimpleTaskScheduler sch = (SimpleTaskScheduler) cog.getScheduler();
TaskSchedulingStrategy strat = sch.getSchedulingStrategy();
System.out.println("Strategy " + strat);
}
return ABSUnit.UNIT;
}
});
thisClass.addMethod(/*ABSUnit*/
"setScheduler", new ABSClosure() {
@Override
public ABSValue exec(ABSDynamicObject t, ABSValue... params) {
COG cog = (COG) t.getFieldValue_Internal("cog");
if (!(cog.getScheduler() instanceof SimpleTaskScheduler)) {
throw new DynamicException("For user-defined scheduling to work, the Scheduler must be an instance of " + SimpleTaskScheduler.class.getName() + " (use \"-taskscheduler=simple\")");
}
// The user-defined scheduler
final ABSDynamicObject userScheduler = (ABSDynamicObject) params[0];
// Create a new scheduling strategy that invokes the user-defined scheduler's "schedule" method
// - convert TaskSchedulingStrategy's List<TaskInfo> to ProcessScheduler's List<Process>
// - convert returned Process to TaskInfo.
// custom TaskSchedulingStrategy
TaskSchedulingStrategy strategy = new TaskSchedulingStrategy() {
@Override
public synchronized SimpleTaskScheduler.TaskInfo schedule(final TaskScheduler scheduler, final List<SimpleTaskScheduler.TaskInfo> schedulableTasks) {
System.out.println("Scheduling (" + schedulableTasks.size() + " processes in queue)...");
// Remember TaskInfos based on their Pids to speed things up a little
HashMap<Long, SimpleTaskScheduler.TaskInfo> taskMap = new HashMap<>();
// Convert List<TaskInfo> to ArrayList<ABSProcess>
ArrayList<ABSProcess> processes = new ArrayList<>();
for (SimpleTaskScheduler.TaskInfo task : schedulableTasks) {
taskMap.put(task.id, task);
// TODO set: pid, method, arrival, cost, deadline, start, finish, critical, value
ABSProcess proc = new ABSProcess(task.task.getID(), task.task.getCall().methodName(), 0, 0, 0, 0, 0, false, 0);
processes.add(proc);
System.out.println("\t" + proc.toString());
}
// FIXME
return schedulableTasks.get(0);
}
};
// Connect the strategy to the cog's scheduler
System.out.println(cog.toString() + ": Setting TaskSchedulingStrategy to: " + userScheduler.getClassName());
// move the userScheduler object to the Cog
// this WILL cause problems if the user associates the scheduler with multiple cogs!!
// userScheduler.setCOG(cog);
SimpleTaskScheduler scheduler = (SimpleTaskScheduler) cog.getScheduler();
scheduler.setSchedulingStrategy(strategy);
return ABSUnit.UNIT;
}
});
}
use of org.abs_models.backend.java.lib.runtime.ABSClosure in project abstools by abstools.
the class Feature method setupMetaAPI.
/*
* Define the methods of this class
*/
public static void setupMetaAPI() {
thisClass.setName("Feature");
thisClass.addMethod(/*ABSString*/
"getName", new ABSClosure() {
@Override
public ABSString exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicFeature f = (ABSDynamicFeature) t;
return ABSString.fromString(f.getName());
}
});
thisClass.addMethod(/*ABSString*/
"getAttributes", new ABSClosure() {
@Override
public ABSString exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicFeature f = (ABSDynamicFeature) t;
// TODO
return ABSString.fromString("Not Implemented Yet");
}
});
}
use of org.abs_models.backend.java.lib.runtime.ABSClosure in project abstools by abstools.
the class Update method setupMetaAPI.
/*
* Define the methods of this class
*/
public static void setupMetaAPI() {
thisClass.setName("Update");
thisClass.addMethod(/*ABSString*/
"getName", new ABSClosure() {
@Override
public ABSString exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicUpdate update = (ABSDynamicUpdate) t;
return ABSString.fromString(update.getName());
}
});
thisClass.addMethod(/*ABSUnit*/
"apply", new ABSClosure() {
@Override
public ABSValue exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicUpdate update = (ABSDynamicUpdate) t;
update.apply();
return ABSUnit.UNIT;
}
});
}
use of org.abs_models.backend.java.lib.runtime.ABSClosure in project abstools by abstools.
the class Product method setupMetaAPI.
/*
* Define the methods of this class
*/
public static void setupMetaAPI() {
thisClass.setName("Product");
/*
* MetaABS Product API -- cf. abslang.abs module ABS.Meta
*/
thisClass.addMethod(/*ABSString*/
"getName", new ABSClosure() {
@Override
public ABSString exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicProduct thisP = (ABSDynamicProduct) t;
return ABSString.fromString(thisP.getName());
}
});
thisClass.addMethod(/*List<ABSDynamicFeature>*/
"getFeatures", new ABSClosure() {
@Override
public ABSValue exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicProduct thisP = (ABSDynamicProduct) t;
ArrayList<ABSDynamicFeature> features = new ArrayList<>();
for (ABSDynamicFeature f : thisP.getFeatures()) {
features.add(f);
}
return ListUtils.toABSList(features);
}
});
thisClass.addMethod(/*Set<ABSDynamicProduct>*/
"getConfigurableProducts", new ABSClosure() {
@Override
public ABSValue exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicProduct thisP = (ABSDynamicProduct) t;
return ListUtils.toABSSet(thisP.getConfigurableProducts());
}
});
thisClass.addMethod(/*ABSDynamicReconfiguration*/
"getReconfiguration", new ABSClosure() {
@Override
public ABSDynamicReconfiguration exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicProduct thisP = (ABSDynamicProduct) t;
ABSDynamicProduct targetP = (ABSDynamicProduct) params[0];
return thisP.getReconfiguration(targetP);
}
});
}
use of org.abs_models.backend.java.lib.runtime.ABSClosure in project abstools by abstools.
the class Method method setupAPI.
/*
* Define the methods of this class
*/
public static void setupAPI() {
thisClass.setName("Method");
// FIXME This does not work currently, because abslang.abs needs to declare
// * the return type
// * the number and types of arguments
thisClass.addMethod(/*ABSValue*/
"exec", new ABSClosure() {
@Override
public ABSValue exec(ABSDynamicObject t, ABSValue... params) {
ABSClosure method = (ABSClosure) t;
// FIXME
// params[0] is the receiver object,
// params[1] is an ABSList with the actual arguments
ABSValue res = method.exec((ABSDynamicObject) params[0], params[1]);
// FIXME return the result...
return ABSUnit.UNIT;
}
});
}
Aggregations