use of abs.backend.java.lib.types.ABSValue in project abstools by abstools.
the class Clazz method setupMetaAPI.
/*
* Define the methods of this class
*/
public static void setupMetaAPI() {
thisClass.setName("Class");
thisClass.addMethod(/*ABSString*/
"getName", new ABSClosure() {
@Override
public ABSString exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicClass cls = (ABSDynamicClass) t.getFieldValue_Internal("class");
return ABSString.fromString(cls.getName());
}
});
thisClass.addMethod(/*ABSClosure*/
"getMethod", new ABSClosure() {
@Override
public ABSDynamicObject exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicClass cls = (ABSDynamicClass) t.getFieldValue_Internal("class");
ABSString name = (ABSString) params[0];
ABSClosure method = cls.getMethod(name.getString());
return method;
}
});
thisClass.addMethod(/*ABSUnit*/
"addMethod", new ABSClosure() {
@Override
public ABSUnit exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicClass cls = (ABSDynamicClass) t.getFieldValue_Internal("class");
ABSString name = (ABSString) params[0];
ABSClosure method = (ABSClosure) ((ABSDynamicObject) params[1]).getFieldValue_Internal("method");
cls.addMethod(name.getString(), method);
return ABSUnit.UNIT;
}
});
thisClass.addMethod(/*ABSUnit*/
"removeMethod", new ABSClosure() {
@Override
public ABSUnit exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicClass cls = (ABSDynamicClass) t.getFieldValue_Internal("class");
ABSString name = (ABSString) params[0];
cls.removeMethod(name.getString());
return ABSUnit.UNIT;
}
});
}
use of abs.backend.java.lib.types.ABSValue 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 TaskInfo schedule(final TaskScheduler scheduler, final List<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, TaskInfo> taskMap = new HashMap<>();
// Convert List<TaskInfo> to ArrayList<ABSProcess>
ArrayList<ABSProcess> processes = new ArrayList<>();
for (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 abs.backend.java.lib.types.ABSValue in project abstools by abstools.
the class SequenceDiagramVisualization method taskCreated.
@Override
public synchronized void taskCreated(TaskView task) {
task.registerTaskListener(this);
if (task.getSource() == null) {
return;
}
String sourceClass = getClassName(task.getSource());
String targetClass = getClassName(task.getTarget());
if (isObservedClass(sourceClass) && isObservedClass(targetClass)) {
String msgAction = ":>";
if (isEnvironmentClass(sourceClass) || isEnvironmentClass(targetClass))
msgAction = ":";
String source = getActorName(task.getSource());
if (isSystemClass(sourceClass))
source = source + "[" + "Task" + task.getSender().getID() + "]";
if (firstMessage) {
writeOutLn();
if (showStartMsg)
writeOutLn("HiddenEnv:Main_1[Task1].start()");
firstMessage = false;
}
if (isObservedClass(targetClass))
task.registerTaskListener(TASK_BLOCKING_OBSERVER);
writeOut(source);
writeOut(msgAction);
/*
* if (systemClasses.contains(task.getSource().getClassName())) {
* writeOut(":>"); }
*/
writeOut(getActorName(task.getTarget()));
if (isSystemClass(targetClass)) {
// if (task.getID() != 1) // no main task
writeOut("[" + "Task" + task.getID() + "]");
}
writeOut(".");
writeOut(task.getMethodName());
writeOut("(");
StringBuffer argString = new StringBuffer();
boolean first = true;
for (ABSValue v : task.getArgs()) {
if (first)
first = false;
else
argString.append(", ");
argString.append("" + v);
}
writeOut(shorten(String.valueOf(argString.toString())));
writeOutLn(")");
}
}
use of abs.backend.java.lib.types.ABSValue in project abstools by abstools.
the class Reconfiguration method setupMetaAPI.
/*
* Define the methods of this class
*/
public static void setupMetaAPI() {
thisClass.setName("Reconfiguration");
/*
* MetaABS Reconfiguration API -- cf. abslang.abs module ABS.Meta
*/
thisClass.addMethod(/*ABSString*/
"getName", new ABSClosure() {
@Override
public ABSString exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicReconfiguration thisR = (ABSDynamicReconfiguration) t;
return ABSString.fromString(thisR.getName());
}
});
thisClass.addMethod(/*ABSDynamicProduct*/
"getCurrentProduct", new ABSClosure() {
@Override
public ABSDynamicProduct exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicReconfiguration thisR = (ABSDynamicReconfiguration) t;
return thisR.getCurrentProduct();
}
});
thisClass.addMethod(/*ABSUnit*/
"setCurrentProduct", new ABSClosure() {
@Override
public ABSUnit exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicReconfiguration thisR = (ABSDynamicReconfiguration) t;
ABSDynamicProduct prod = (ABSDynamicProduct) params[0];
thisR.setCurrentProduct(prod);
return ABSUnit.UNIT;
}
});
thisClass.addMethod(/*ABSDynamicProduct*/
"getTargetProduct", new ABSClosure() {
@Override
public ABSDynamicProduct exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicReconfiguration thisR = (ABSDynamicReconfiguration) t;
return thisR.getTargetProduct();
}
});
thisClass.addMethod(/*ABSUnit*/
"setTargetProduct", new ABSClosure() {
@Override
public ABSUnit exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicReconfiguration thisR = (ABSDynamicReconfiguration) t;
ABSDynamicProduct prod = (ABSDynamicProduct) params[0];
thisR.setTargetProduct(prod);
return ABSUnit.UNIT;
}
});
thisClass.addMethod(/*List<ABSDynamicDelta>*/
"getDeltas", new ABSClosure() {
@Override
public ABSValue exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicReconfiguration thisR = (ABSDynamicReconfiguration) t;
List<ABSDynamicDelta> deltas = thisR.getDeltas();
return ListUtils.toABSList(deltas);
}
});
thisClass.addMethod(/*List<ABSDynamicDelta>*/
"setDeltas", new ABSClosure() {
@Override
public ABSValue exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicReconfiguration thisR = (ABSDynamicReconfiguration) t;
// TODO
return ABSUnit.UNIT;
}
});
thisClass.addMethod(/*ABSDynamicUpdate*/
"getStateUpdate", new ABSClosure() {
@Override
public ABSDynamicUpdate exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicReconfiguration thisR = (ABSDynamicReconfiguration) t;
return thisR.getUpdate();
}
});
thisClass.addMethod(/*List<ABSDynamicDelta>*/
"setStateUpdate", new ABSClosure() {
@Override
public ABSValue exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicReconfiguration thisR = (ABSDynamicReconfiguration) t;
ABSDynamicUpdate upd = (ABSDynamicUpdate) params[0];
thisR.setUpdate(upd);
return ABSUnit.UNIT;
}
});
}
use of abs.backend.java.lib.types.ABSValue 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;
}
});
}
Aggregations