package edu.purdue.scjtck; import javax.realtime.AperiodicParameters; import javax.realtime.PeriodicParameters; import javax.realtime.PriorityParameters; import javax.realtime.PriorityScheduler; import javax.realtime.RelativeTime; import javax.safetycritical.AperiodicEventHandler; import javax.safetycritical.Mission; import javax.safetycritical.MissionSequencer; import javax.safetycritical.PeriodicEventHandler; import javax.safetycritical.Safelet; import javax.safetycritical.StorageParameters; import javax.safetycritical.Terminal; import javax.safetycritical.annotate.Level; public abstract class MainSafelet implements Safelet { protected abstract String getArgs(); protected Properties _prop = new Properties(); protected Thread _launcher; /* Parameters generated from Properties.java */ // jrri: Are these used for something? protected PriorityParameters _priorityParam; protected AperiodicParameters _aperiodicParam; protected PeriodicParameters _periodicParam; protected StorageParameters _storageParam; // protected StorageConfigurationParameters _storageParam; /* ----------------- Methods ------------------- */ public void initializeApplication() { // _launcher = Thread.currentThread(); // _prop.parseArgs(PropFileReader.readAll()); _prop.parseArgs(getArgs()); _priorityParam = new PriorityParameters(_prop._priority); _periodicParam = new PeriodicParameters(new RelativeTime(_prop._iDelay, 0), new RelativeTime(_prop._period, 0)); // _aperiodicParam = new AperiodicParameters(); _aperiodicParam = new AperiodicParameters(null, null); // _storageParam = new StorageConfigurationParameters(0, 0, 0); // _storageParam = new StorageParameters(0, 0, 0); _storageParam = new StorageParameters(0, null); Terminal.getTerminal().writeln(getInfo()); } // Current spec has no teardown() method as part of the Safelet interface public void teardown() { Terminal.getTerminal().writeln(report()); } // public Level getLevel() { // return _prop._level; // } protected abstract String getInfo(); protected abstract String report(); /* -------------- Wrapped Classes -------------- */ public abstract class GeneralMission extends Mission { public long missionMemorySize() { return _prop._missionMemSize; } @Override protected void cleanUp() { super.cleanUp(); // _launcher.interrupt(); } } // public class GeneralSingleMissionSequencer extends SingleMissionSequencer // { public class GeneralSingleMissionSequencer extends MissionSequencer { private Mission mission; public GeneralSingleMissionSequencer(Mission mission) { super(new PriorityParameters(_prop._priority), new StorageParameters(_prop._schedObjBackStoreSize, null)); this.mission = mission; } @Override protected Mission getNextMission() { return mission; } } public abstract class GeneralMissionSequencer extends MissionSequencer { public GeneralMissionSequencer() { super(new PriorityParameters(_prop._priority), new StorageParameters(_prop._schedObjBackStoreSize, null)); } } public abstract class GeneralPeriodicEventHandler extends PeriodicEventHandler { public GeneralPeriodicEventHandler() { super(new PriorityParameters(_prop._priority), new PeriodicParameters(new RelativeTime(_prop._iDelay, 0), new RelativeTime(_prop._period, 0)), new StorageParameters(_prop._schedObjBackStoreSize, null), _prop._schedObjScopeSize); } } public abstract class GeneralAperiodicEventHandler extends AperiodicEventHandler { public GeneralAperiodicEventHandler() { super(new PriorityParameters(_prop._priority), new AperiodicParameters(null, null), new StorageParameters( _prop._schedObjBackStoreSize, null) , _prop._schedObjScopeSize ); } public GeneralAperiodicEventHandler(String name) { super(new PriorityParameters(_prop._priority), new AperiodicParameters(null, null), new StorageParameters( _prop._schedObjBackStoreSize, null), _prop._schedObjScopeSize, name); } } // No managed threads for now... // public class GeneralManagedThread extends ManagedThread { // // public GeneralManagedThread() { // super(new PriorityParameters(_prop._priority), // // new StorageConfigurationParameters(0, 0, 0), null); // new StorageParameters(0, 0, 0), null); // } // } public class Terminator extends PeriodicEventHandler { public Terminator() { super(new PriorityParameters(PriorityScheduler.instance() .getMaxPriority()), new PeriodicParameters( new RelativeTime(_prop._duration, 0), new RelativeTime( Long.MAX_VALUE, 0)), new StorageParameters(_prop._schedObjBackStoreSize, null), _prop._schedObjScopeSize); } @Override public void handleAsyncEvent() { Mission.getCurrentMission().requestSequenceTermination(); teardown(); // getSequencer().requestSequenceTermination(); // ((ManagedMemory) RealtimeThread.getCurrentMemoryArea()) // .getManager().getMission().requestSequenceTermination(); } } }