package javax.safetycritical.test;
import javax.realtime.PeriodicParameters;
import javax.realtime.PriorityParameters;
import javax.realtime.RelativeTime;
import javax.realtime.ThrowBoundaryError;
import javax.safetycritical.ManagedMemory;
import javax.safetycritical.Mission;
import javax.safetycritical.MissionSequencer;
import javax.safetycritical.PeriodicEventHandler;
import javax.safetycritical.Safelet;
import javax.safetycritical.StorageParameters;
public class ScopeTest implements Safelet
{
private MissionSequencer seq = null;
@Override
public MissionSequencer getSequencer()
{
if(seq == null)
{
seq = new MissionSequencer(
new PriorityParameters(0),
new StorageParameters(100, null, 0,0)
)
{
private Mission mission = null;
@Override
protected Mission getNextMission()
{
if(mission == null)
{
mission = new Mission()
{
PeriodicEventHandler peh = null;
@Override
public long missionMemorySize()
{
return 50;
}
@Override
protected void initialize()
{
if(peh == null)
{
peh = new PeriodicEventHandler(
new PriorityParameters(1),
new PeriodicParameters(null, new RelativeTime(1000,0)),
new StorageParameters(1000, null, 0, 0), 500
)
{
public Object innerObjectReference = null;
private Runnable innerLogic = null;
@Override
public void handleAsyncEvent()
{
if(innerLogic == null)
{
innerLogic = new Runnable()
{
private Object object = null;
private boolean caughtException = false;
@Override
public void run()
{
if(object == null)
{
object = new Object();
}
caughtException = false;
try
{
innerObjectReference = object;
} catch (Exception e)
{
caughtException = true;
}
if(!caughtException)
{
throw new ThrowBoundaryError("The inner logic assigned a referenced to an inner object in an outer object!");
}
}
};
}
ManagedMemory.getCurrentManagedMemory().enterPrivateMemory(20, innerLogic);
}
};
}
}
};
}
return mission;
}
};
}
return seq;
}
@Override
public long immortalMemorySize() {
return 20000;
}
}