/**
* Copyright (c) 2009-2011, The HATS Consortium. All rights reserved.
* This file is licensed under the terms of the Modified BSD License.
*/
package abs.backend.java.lib.runtime.metaABS;
import java.util.List;
import abs.backend.java.lib.runtime.ABSClosure;
import abs.backend.java.lib.runtime.ABSDynamicClass;
import abs.backend.java.lib.runtime.ABSDynamicDelta;
import abs.backend.java.lib.runtime.ABSDynamicObject;
import abs.backend.java.lib.runtime.ABSDynamicProduct;
import abs.backend.java.lib.runtime.ABSDynamicReconfiguration;
import abs.backend.java.lib.runtime.ABSDynamicUpdate;
import abs.backend.java.lib.types.ABSString;
import abs.backend.java.lib.types.ABSUnit;
import abs.backend.java.lib.types.ABSValue;
import abs.common.ListUtils;
public class Reconfiguration {
private static ABSDynamicClass thisClass;
/*
* Create singleton object
*/
public static ABSDynamicClass singleton() {
if (thisClass == null) {
thisClass = new ABSDynamicClass();
setupMetaAPI();
}
return thisClass;
}
/*
* 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;
}
});
}
}