de.cau.cs.kieler.kaom.sim.ptolemy
Class KaomSimDataComponent

java.lang.Object
  extended by de.cau.cs.kieler.sim.kiem.internal.AbstractDataComponent
      extended by de.cau.cs.kieler.sim.kiem.JSONObjectDataComponent
          extended by de.cau.cs.kieler.kaom.sim.ptolemy.KaomSimDataComponent
All Implemented Interfaces:
IDataComponent, IJSONObjectDataComponent, IExecutableExtension

public class KaomSimDataComponent
extends JSONObjectDataComponent

The class SimpleRailCtrl DataComponent implements a KIELER Execution Manager DataComponent.
Within its initialize() method it performs the model2model Xtend transformation to create a semantically equivalent but executable Ptolemy model out of the SimpleRailCtrl EMF model instance. It also loads the Ptolemy model within a PtolemyExecutor and adapts the port and host for connecting to the model railway simulation engine.
Within its step(JSONObject) method it then triggers a step of the PtolemyExecutor. Because this is done asynchronously the triggering of a consecutive step may lead to an KiemExecutionError be thrown that was initially the consequence of the last (async) call to the step method of the PtolemyExecutor.

Rating red

Field Summary
 
Fields inherited from class de.cau.cs.kieler.sim.kiem.internal.AbstractDataComponent
MASTER_CMD_MACROSTEP, MASTER_CMD_PAUSE, MASTER_CMD_RUN, MASTER_CMD_STEP, MASTER_CMD_STEPBACK, MASTER_CMD_STOP
 
Constructor Summary
KaomSimDataComponent()
          Instantiates a new SimpleRailCtrl DataComponent for the KIELER Execution Manager.
 
Method Summary
 void bringProblemsViewToFront()
           
 void checkProperties(KiemProperty[] properties)
          This method is intended to check if the properties are set correctly.
 void initialize()
          Initialize.
 boolean isObserver()
          To check whether the DataComponent is an observer.
 boolean isProducer()
          To check whether the DataComponent is a producer.
 boolean isRecursive()
           
 void loadAndExecuteModel()
           
 JSONObject provideInitialVariables()
          Provide (local) interface variables and possible initial values.
 KiemProperty[] provideProperties()
          Provide properties for this component.
 URL resolveBundelFile(String relativePath)
           
 JSONObject step(JSONObject jSONObject)
          Step method for a DataObserver and a DataPrroducer.
 void wrapup()
          Wrap-up.
 
Methods inherited from class de.cau.cs.kieler.sim.kiem.JSONObjectDataComponent
getInitialVariables, provideFilterKeysJSON, setInitialVariables
 
Methods inherited from class de.cau.cs.kieler.sim.kiem.internal.AbstractDataComponent
finalize, getConfigurationElement, getCurrentComponentID, getDataComponentId, getName, getPluginId, getProperties, getShell, isDeltaObserver, isHistoryObserver, isHistoryStep, isInvisible, isMacroStepDone, isMaster, isMasterImplementingGUI, isMultiInstantiable, masterCommand, masterGetAimedStepDuration, masterGUI, masterGUIisEnabled, masterIsPaused, masterIsRunning, masterSetAimedStepDuration, masterSetKIEMInstance, notifyEvent, provideEventOfInterest, provideFilterKeys, setConfigurationElemenet, setCurrentComponentID, setHistoryStep, setInitializationData, setProperties
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

KaomSimDataComponent

public KaomSimDataComponent()
Instantiates a new SimpleRailCtrl DataComponent for the KIELER Execution Manager.

Method Detail

step

public JSONObject step(JSONObject jSONObject)
                throws KiemExecutionException
Description copied from interface: IJSONObjectDataComponent
Step method for a DataObserver and a DataPrroducer.

For a producer only the argument will always be null. For an observer only this method will be called asynchronous. This may mean that in case the observer is slow, it may be skipped at some consecutive steps until it becomes ready again. If this is not desired and the observer MUST NOT be skipped, then the DataComponent should also be a DataProducer but return just null.

If an error occurs during the execution of the step method, a DataComponent should raise a KiemExecutionException that is then catched by the execution manager an brought to the user's attention.

Parameters:
jSONObject - the concrete JSONObject of input data (if observer)
Returns:
the JSONObject with the output data (if producer)
Throws:
KiemExecutionException - a KiemExecutionException

isRecursive

public boolean isRecursive()

provideInitialVariables

public JSONObject provideInitialVariables()
                                   throws KiemInitializationException
Description copied from class: JSONObjectDataComponent
Provide (local) interface variables and possible initial values. This is an optional method that will provide some interface variable keys and values that can be used by other DataComponents within and after the initialization phase every DataComponent may receive the union of all those variable keys by calling the JSONObjectDataComponent.getInitialVariables() method.

Overrides:
provideInitialVariables in class JSONObjectDataComponent
Returns:
the local initial variables as a JSONObject
Throws:
KiemInitializationException - if a property prevents the execution of this DataComponent this error should be thrown

resolveBundelFile

public URL resolveBundelFile(String relativePath)

loadAndExecuteModel

public void loadAndExecuteModel()
                         throws KiemInitializationException
Throws:
KiemInitializationException

initialize

public void initialize()
                throws KiemInitializationException
Description copied from interface: IDataComponent
Initialize. Do some initializing prior to execution. If an error occurs during initialization, the DataComponent should raise a KiemInitializationException.

Throws:
KiemInitializationException - a KiemInitializationException

bringProblemsViewToFront

public void bringProblemsViewToFront()

isObserver

public boolean isObserver()
Description copied from interface: IDataComponent
To check whether the DataComponent is an observer. If the DataComponent is an observer the arguments in its step() method will be != null.

Returns:
true, if is observer

isProducer

public boolean isProducer()
Description copied from interface: IDataComponent
To check whether the DataComponent is a producer. If the DataComponent is a producer it should return != null in its step() method.

Returns:
true, if is producer

wrapup

public void wrapup()
Description copied from interface: IDataComponent
Wrap-up. Do some wrapping-up after execution has finished. If an error occurs during wrap up, the DataComponent should raise a KiemInitializationException.


provideProperties

public KiemProperty[] provideProperties()
Description copied from class: AbstractDataComponent
Provide properties for this component. The component may create and publicize its properties with this method. They will be set/modified by the execution manager during the user edits them. Whenever the user decides to run/start the execution the properties are tested (see below) and the component may use there settings.

The following lists a simple example for such properties:
\ATOverride
public KiemProperty[] provideProperties() {
KiemProperty[] properties = new KiemProperty[7];
properties[0] = new KiemProperty(
"state name",
"state");
properties[1] = new KiemProperty(
"some bool",
true);
properties[2] = new KiemProperty(
"an integer",
2);
properties[3] = new KiemProperty(
"a file",
new KiemPropertyTypeFile(),
"c:/nothing.txt");
String[] items = {"trace 1","trace 2", "trace 3", "trace 4"};
properties[4] = new KiemProperty(
"a choice",
new KiemPropertyTypeChoice(items),
items[2]);
properties[5] = new KiemProperty(
"workspace file",
new KiemPropertyTypeWorkspaceFile(),
"/nothing.txt");
properties[6] = new KiemProperty(
"editor",
new KiemPropertyTypeEditor(),
"");
return properties;
}

These are built-in types that can always be extended using the KiemProperty class.

Overrides:
provideProperties in class AbstractDataComponent
Returns:
the KiemProperty[] or null if no properties are provided

checkProperties

public void checkProperties(KiemProperty[] properties)
                     throws KiemPropertyException
Description copied from class: AbstractDataComponent
This method is intended to check if the properties are set correctly. Here a component may check for required and optional properties and their settings. Also an KiemPropertyError can be raised if some property prevents the execution of this component.

Overrides:
checkProperties in class AbstractDataComponent
Parameters:
properties - the properties with the current user settings
Throws:
KiemPropertyException - if a property prevents the execution of this DataComponent this error should be thrown