Search in sources :

Example 1 with ABSValue

use of org.abs_models.backend.java.lib.types.ABSValue in project abstools by abstools.

the class TestModel method testStarted.

public void testStarted(TaskView task) {
    final String testMethod;
    final String className;
    final List<ABSValue> testMethodArguments;
    final LinkedList<ABSValue> arguments = new LinkedList<>();
    if (task.getStack().hasFrames()) {
        final TaskStackFrameView currentF = task.getStack().getCurrentFrame();
        testMethod = currentF.getMethod().getName();
        className = currentF.getMethod().getClassView().getName();
        for (String parameterName : currentF.getVariableNames()) {
            arguments.add(currentF.getValue(parameterName));
        }
    } else {
        testMethod = task.getMethodName();
        className = task.getTarget().getClassName();
        arguments.addAll(task.getArgs());
    }
    if (!task.getStack().hasFrames()) {
        System.out.println("Not yet started " + testMethod + " for task " + task.getID());
    } else {
        System.out.println("Test " + task.getStack().getCurrentFrame().getMethod() + " task: " + task.getID());
    }
    final TestStatus newTest = new TestStatus(task.getID(), testMethod, className, arguments, task.getStack().getFrames(), TestStatus.Status.ACTIVE);
    push(newTest);
    System.out.println("Test started: " + task.getMethodName() + " : " + testMethod);
    informListenersTestStarted(newTest);
}
Also used : ABSValue(org.abs_models.backend.java.lib.types.ABSValue) TaskStackFrameView(org.abs_models.backend.java.observing.TaskStackFrameView) LinkedList(java.util.LinkedList)

Example 2 with ABSValue

use of org.abs_models.backend.java.lib.types.ABSValue in project abstools by abstools.

the class Task method run.

public void run() {
    synchronized (this) {
        if (view != null)
            view.taskStarted();
        executingThread = Thread.currentThread();
    }
    try {
        ABSValue res = (ABSValue) call.execute();
        future.resolve(res);
    } catch (ABSException e) {
        this.exception = e;
        future.smash(e);
        getCOG().getRuntime().handleABSException(this, e);
    } catch (SystemTerminatedException e) {
    } catch (Exception e) {
        e.printStackTrace();
        ABSException absException = new ABSAssertException("Sorry, this is a bug in the Java backend of ABS: " + "Unexpected exception: " + e);
        // TODO new subclass for internal error
        absException.setStackTrace(e.getStackTrace());
        getCOG().getRuntime().handleABSException(this, absException);
    }
    synchronized (this) {
        if (view != null)
            view.taskFinished();
    }
}
Also used : ABSValue(org.abs_models.backend.java.lib.types.ABSValue)

Example 3 with ABSValue

use of org.abs_models.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 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;
        }
    });
}
Also used : ABSDynamicObject(org.abs_models.backend.java.lib.runtime.ABSDynamicObject) ABSClosure(org.abs_models.backend.java.lib.runtime.ABSClosure) HashMap(java.util.HashMap) SimpleTaskScheduler(org.abs_models.backend.java.scheduling.SimpleTaskScheduler) ArrayList(java.util.ArrayList) ABSValue(org.abs_models.backend.java.lib.types.ABSValue) TaskScheduler(org.abs_models.backend.java.scheduling.TaskScheduler) SimpleTaskScheduler(org.abs_models.backend.java.scheduling.SimpleTaskScheduler) ABSProcess(org.abs_models.backend.java.lib.types.ABSProcess) DynamicException(org.abs_models.backend.java.codegeneration.dynamic.DynamicException) TaskSchedulingStrategy(org.abs_models.backend.java.scheduling.TaskSchedulingStrategy) COG(org.abs_models.backend.java.lib.runtime.COG)

Example 4 with ABSValue

use of org.abs_models.backend.java.lib.types.ABSValue 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");
        }
    });
}
Also used : ABSDynamicObject(org.abs_models.backend.java.lib.runtime.ABSDynamicObject) ABSClosure(org.abs_models.backend.java.lib.runtime.ABSClosure) ABSDynamicFeature(org.abs_models.backend.java.lib.runtime.ABSDynamicFeature) ABSValue(org.abs_models.backend.java.lib.types.ABSValue) ABSString(org.abs_models.backend.java.lib.types.ABSString)

Example 5 with ABSValue

use of org.abs_models.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;
        }
    });
}
Also used : ABSDynamicObject(org.abs_models.backend.java.lib.runtime.ABSDynamicObject) ABSClosure(org.abs_models.backend.java.lib.runtime.ABSClosure) ABSDynamicUpdate(org.abs_models.backend.java.lib.runtime.ABSDynamicUpdate) ABSValue(org.abs_models.backend.java.lib.types.ABSValue) ABSString(org.abs_models.backend.java.lib.types.ABSString)

Aggregations

ABSValue (org.abs_models.backend.java.lib.types.ABSValue)16 ABSClosure (org.abs_models.backend.java.lib.runtime.ABSClosure)10 ABSDynamicObject (org.abs_models.backend.java.lib.runtime.ABSDynamicObject)10 ABSString (org.abs_models.backend.java.lib.types.ABSString)8 ABSUnit (org.abs_models.backend.java.lib.types.ABSUnit)4 ArrayList (java.util.ArrayList)3 ABSDynamicProduct (org.abs_models.backend.java.lib.runtime.ABSDynamicProduct)3 ABSDynamicReconfiguration (org.abs_models.backend.java.lib.runtime.ABSDynamicReconfiguration)3 ABSDynamicClass (org.abs_models.backend.java.lib.runtime.ABSDynamicClass)2 ABSDynamicFeature (org.abs_models.backend.java.lib.runtime.ABSDynamicFeature)2 ABSDynamicUpdate (org.abs_models.backend.java.lib.runtime.ABSDynamicUpdate)2 COG (org.abs_models.backend.java.lib.runtime.COG)2 HashMap (java.util.HashMap)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 DynamicException (org.abs_models.backend.java.codegeneration.dynamic.DynamicException)1 ABSDynamicDelta (org.abs_models.backend.java.lib.runtime.ABSDynamicDelta)1 ABSDynamicProductLine (org.abs_models.backend.java.lib.runtime.ABSDynamicProductLine)1 ABSBool (org.abs_models.backend.java.lib.types.ABSBool)1 ABSProcess (org.abs_models.backend.java.lib.types.ABSProcess)1