public interface Action extends EObject
{
  /**
   * Returns the value of the '<em><b>Action Holder</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Action Holder</em>' containment reference isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Action Holder</em>' containment reference.
   * @see #setActionHolder(EObject)
   * @see robotcontrol.roc.RocPackage#getAction_ActionHolder()
   * @model containment="true"
   * @generated
   */
  EObject getActionHolder();

  /**
   * Sets the value of the '{@link robotcontrol.roc.Action#getActionHolder <em>Action Holder</em>}' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Action Holder</em>' containment reference.
   * @see #getActionHolder()
   * @generated
   */
  void setActionHolder(EObject value);

  /**
   * Returns the value of the '<em><b>Intensity</b></em>' attribute.
   * The literals are from the enumeration {@link robotcontrol.roc.Intensity}.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Intensity</em>' attribute isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Intensity</em>' attribute.
   * @see robotcontrol.roc.Intensity
   * @see #setIntensity(Intensity)
   * @see robotcontrol.roc.RocPackage#getAction_Intensity()
   * @model
   * @generated
   */
  Intensity getIntensity();

  /**
   * Sets the value of the '{@link robotcontrol.roc.Action#getIntensity <em>Intensity</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Intensity</em>' attribute.
   * @see robotcontrol.roc.Intensity
   * @see #getIntensity()
   * @generated
   */
  void setIntensity(Intensity value);

} // Action public interface CompleteAction extends EObject
{
  /**
   * Returns the value of the '<em><b>Action Name</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Action Name</em>' attribute isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Action Name</em>' attribute.
   * @see #setActionName(String)
   * @see robotcontrol.roc.RocPackage#getCompleteAction_ActionName()
   * @model
   * @generated
   */
  String getActionName();

  /**
   * Sets the value of the '{@link robotcontrol.roc.CompleteAction#getActionName <em>Action Name</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Action Name</em>' attribute.
   * @see #getActionName()
   * @generated
   */
  void setActionName(String value);

} // CompleteAction public interface DirectedAction extends EObject
{
  /**
   * Returns the value of the '<em><b>Action Name</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Action Name</em>' containment reference isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Action Name</em>' containment reference.
   * @see #setActionName(EObject)
   * @see robotcontrol.roc.RocPackage#getDirectedAction_ActionName()
   * @model containment="true"
   * @generated
   */
  EObject getActionName();

  /**
   * Sets the value of the '{@link robotcontrol.roc.DirectedAction#getActionName <em>Action Name</em>}' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Action Name</em>' containment reference.
   * @see #getActionName()
   * @generated
   */
  void setActionName(EObject value);

  /**
   * Returns the value of the '<em><b>Direction</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Direction</em>' containment reference isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Direction</em>' containment reference.
   * @see #setDirection(EObject)
   * @see robotcontrol.roc.RocPackage#getDirectedAction_Direction()
   * @model containment="true"
   * @generated
   */
  EObject getDirection();

  /**
   * Sets the value of the '{@link robotcontrol.roc.DirectedAction#getDirection <em>Direction</em>}' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Direction</em>' containment reference.
   * @see #getDirection()
   * @generated
   */
  void setDirection(EObject value);

} // DirectedAction public interface Direction extends EObject
{
  /**
   * Returns the value of the '<em><b>UP</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>UP</em>' attribute isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>UP</em>' attribute.
   * @see #setUP(String)
   * @see robotcontrol.roc.RocPackage#getDirection_UP()
   * @model
   * @generated
   */
  String getUP();

  /**
   * Sets the value of the '{@link robotcontrol.roc.Direction#getUP <em>UP</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>UP</em>' attribute.
   * @see #getUP()
   * @generated
   */
  void setUP(String value);

  /**
   * Returns the value of the '<em><b>DOWN</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>DOWN</em>' attribute isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>DOWN</em>' attribute.
   * @see #setDOWN(String)
   * @see robotcontrol.roc.RocPackage#getDirection_DOWN()
   * @model
   * @generated
   */
  String getDOWN();

  /**
   * Sets the value of the '{@link robotcontrol.roc.Direction#getDOWN <em>DOWN</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>DOWN</em>' attribute.
   * @see #getDOWN()
   * @generated
   */
  void setDOWN(String value);

  /**
   * Returns the value of the '<em><b>LEFT</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>LEFT</em>' attribute isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>LEFT</em>' attribute.
   * @see #setLEFT(String)
   * @see robotcontrol.roc.RocPackage#getDirection_LEFT()
   * @model
   * @generated
   */
  String getLEFT();

  /**
   * Sets the value of the '{@link robotcontrol.roc.Direction#getLEFT <em>LEFT</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>LEFT</em>' attribute.
   * @see #getLEFT()
   * @generated
   */
  void setLEFT(String value);

  /**
   * Returns the value of the '<em><b>RIGHT</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>RIGHT</em>' attribute isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>RIGHT</em>' attribute.
   * @see #setRIGHT(String)
   * @see robotcontrol.roc.RocPackage#getDirection_RIGHT()
   * @model
   * @generated
   */
  String getRIGHT();

  /**
   * Sets the value of the '{@link robotcontrol.roc.Direction#getRIGHT <em>RIGHT</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>RIGHT</em>' attribute.
   * @see #getRIGHT()
   * @generated
   */
  void setRIGHT(String value);

} // Direction public enum DurationUnit implements Enumerator
{
  /**
   * The '<em><b>MILLISECONDS</b></em>' literal object.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #MILLISECONDS_VALUE
   * @generated
   * @ordered
   */
  MILLISECONDS(0, "MILLISECONDS", "milliseconds"),

  /**
   * The '<em><b>SECONDS</b></em>' literal object.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #SECONDS_VALUE
   * @generated
   * @ordered
   */
  SECONDS(1, "SECONDS", "seconds"),

  /**
   * The '<em><b>MINUTES</b></em>' literal object.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #MINUTES_VALUE
   * @generated
   * @ordered
   */
  MINUTES(2, "MINUTES", "minutes");

  /**
   * The '<em><b>MILLISECONDS</b></em>' literal value.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of '<em><b>MILLISECONDS</b></em>' literal object isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @see #MILLISECONDS
   * @model literal="milliseconds"
   * @generated
   * @ordered
   */
  public static final int MILLISECONDS_VALUE = 0;

  /**
   * The '<em><b>SECONDS</b></em>' literal value.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of '<em><b>SECONDS</b></em>' literal object isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @see #SECONDS
   * @model literal="seconds"
   * @generated
   * @ordered
   */
  public static final int SECONDS_VALUE = 1;

  /**
   * The '<em><b>MINUTES</b></em>' literal value.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of '<em><b>MINUTES</b></em>' literal object isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @see #MINUTES
   * @model literal="minutes"
   * @generated
   * @ordered
   */
  public static final int MINUTES_VALUE = 2;

  /**
   * An array of all the '<em><b>Duration Unit</b></em>' enumerators.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private static final DurationUnit[] VALUES_ARRAY =
    new DurationUnit[]
    {
      MILLISECONDS,
      SECONDS,
      MINUTES,
    };

  /**
   * A public read-only list of all the '<em><b>Duration Unit</b></em>' enumerators.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public static final List<DurationUnit> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));

  /**
   * Returns the '<em><b>Duration Unit</b></em>' literal with the specified literal value.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param literal the literal.
   * @return the matching enumerator or <code>null</code>.
   * @generated
   */
  public static DurationUnit get(String literal)
  {
    for (int i = 0; i < VALUES_ARRAY.length; ++i)
    {
      DurationUnit result = VALUES_ARRAY[i];
      if (result.toString().equals(literal))
      {
        return result;
      }
    }
    return null;
  }

  /**
   * Returns the '<em><b>Duration Unit</b></em>' literal with the specified name.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param name the name.
   * @return the matching enumerator or <code>null</code>.
   * @generated
   */
  public static DurationUnit getByName(String name)
  {
    for (int i = 0; i < VALUES_ARRAY.length; ++i)
    {
      DurationUnit result = VALUES_ARRAY[i];
      if (result.getName().equals(name))
      {
        return result;
      }
    }
    return null;
  }

  /**
   * Returns the '<em><b>Duration Unit</b></em>' literal with the specified integer value.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the integer value.
   * @return the matching enumerator or <code>null</code>.
   * @generated
   */
  public static DurationUnit get(int value)
  {
    switch (value)
    {
      case MILLISECONDS_VALUE: return MILLISECONDS;
      case SECONDS_VALUE: return SECONDS;
      case MINUTES_VALUE: return MINUTES;
    }
    return null;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private final int value;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private final String name;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private final String literal;

  /**
   * Only this class can construct instances.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private DurationUnit(int value, String name, String literal)
  {
    this.value = value;
    this.name = name;
    this.literal = literal;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public int getValue()
  {
    return value;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public String getName()
  {
    return name;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public String getLiteral()
  {
    return literal;
  }

  /**
   * Returns the literal value of the enumerator, which is its string representation.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  @Override
  public String toString()
  {
    return literal;
  }
  
} //DurationUnit public interface FullDirectedAction extends EObject
{
  /**
   * Returns the value of the '<em><b>Turn Head</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Turn Head</em>' attribute isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Turn Head</em>' attribute.
   * @see #setTurnHead(String)
   * @see robotcontrol.roc.RocPackage#getFullDirectedAction_TurnHead()
   * @model
   * @generated
   */
  String getTurnHead();

  /**
   * Sets the value of the '{@link robotcontrol.roc.FullDirectedAction#getTurnHead <em>Turn Head</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Turn Head</em>' attribute.
   * @see #getTurnHead()
   * @generated
   */
  void setTurnHead(String value);

  /**
   * Returns the value of the '<em><b>Turn Eyes</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Turn Eyes</em>' attribute isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Turn Eyes</em>' attribute.
   * @see #setTurnEyes(String)
   * @see robotcontrol.roc.RocPackage#getFullDirectedAction_TurnEyes()
   * @model
   * @generated
   */
  String getTurnEyes();

  /**
   * Sets the value of the '{@link robotcontrol.roc.FullDirectedAction#getTurnEyes <em>Turn Eyes</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Turn Eyes</em>' attribute.
   * @see #getTurnEyes()
   * @generated
   */
  void setTurnEyes(String value);

} // FullDirectedAction public interface LeftRightDirectedAction extends EObject
{
  /**
   * Returns the value of the '<em><b>Tilt Head</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Tilt Head</em>' attribute isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Tilt Head</em>' attribute.
   * @see #setTiltHead(String)
   * @see robotcontrol.roc.RocPackage#getLeftRightDirectedAction_TiltHead()
   * @model
   * @generated
   */
  String getTiltHead();

  /**
   * Sets the value of the '{@link robotcontrol.roc.LeftRightDirectedAction#getTiltHead <em>Tilt Head</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Tilt Head</em>' attribute.
   * @see #getTiltHead()
   * @generated
   */
  void setTiltHead(String value);

} // LeftRightDirectedAction public interface Motion extends EObject
{
  /**
   * Returns the value of the '<em><b>Action</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Action</em>' containment reference isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Action</em>' containment reference.
   * @see #setAction(Action)
   * @see robotcontrol.roc.RocPackage#getMotion_Action()
   * @model containment="true"
   * @generated
   */
  Action getAction();

  /**
   * Sets the value of the '{@link robotcontrol.roc.Motion#getAction <em>Action</em>}' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Action</em>' containment reference.
   * @see #getAction()
   * @generated
   */
  void setAction(Action value);

  /**
   * Returns the value of the '<em><b>Duration</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Duration</em>' attribute isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Duration</em>' attribute.
   * @see #setDuration(String)
   * @see robotcontrol.roc.RocPackage#getMotion_Duration()
   * @model
   * @generated
   */
  String getDuration();

  /**
   * Sets the value of the '{@link robotcontrol.roc.Motion#getDuration <em>Duration</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Duration</em>' attribute.
   * @see #getDuration()
   * @generated
   */
  void setDuration(String value);

  /**
   * Returns the value of the '<em><b>Duration Unit</b></em>' attribute.
   * The literals are from the enumeration {@link robotcontrol.roc.DurationUnit}.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Duration Unit</em>' attribute isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Duration Unit</em>' attribute.
   * @see robotcontrol.roc.DurationUnit
   * @see #setDurationUnit(DurationUnit)
   * @see robotcontrol.roc.RocPackage#getMotion_DurationUnit()
   * @model
   * @generated
   */
  DurationUnit getDurationUnit();

  /**
   * Sets the value of the '{@link robotcontrol.roc.Motion#getDurationUnit <em>Duration Unit</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Duration Unit</em>' attribute.
   * @see robotcontrol.roc.DurationUnit
   * @see #getDurationUnit()
   * @generated
   */
  void setDurationUnit(DurationUnit value);

  /**
   * Returns the value of the '<em><b>Speed</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Speed</em>' containment reference isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Speed</em>' containment reference.
   * @see #setSpeed(Speed)
   * @see robotcontrol.roc.RocPackage#getMotion_Speed()
   * @model containment="true"
   * @generated
   */
  Speed getSpeed();

  /**
   * Sets the value of the '{@link robotcontrol.roc.Motion#getSpeed <em>Speed</em>}' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Speed</em>' containment reference.
   * @see #getSpeed()
   * @generated
   */
  void setSpeed(Speed value);

} // Motion public interface Movement extends EObject
{
  /**
   * Returns the value of the '<em><b>Motions</b></em>' containment reference list.
   * The list contents are of type {@link robotcontrol.roc.Motion}.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Motions</em>' containment reference list isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Motions</em>' containment reference list.
   * @see robotcontrol.roc.RocPackage#getMovement_Motions()
   * @model containment="true"
   * @generated
   */
  EList<Motion> getMotions();

} // Movement public interface RocPackage extends EPackage
{
  /**
   * The package name.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  String eNAME = "roc";

  /**
   * The package namespace URI.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  String eNS_URI = "http://www.Roc.robotcontrol";

  /**
   * The package namespace name.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  String eNS_PREFIX = "roc";

  /**
   * The singleton instance of the package.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  RocPackage eINSTANCE = robotcontrol.roc.impl.RocPackageImpl.init();

  /**
   * The meta object id for the '{@link robotcontrol.roc.impl.ProgramImpl <em>Program</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see robotcontrol.roc.impl.ProgramImpl
   * @see robotcontrol.roc.impl.RocPackageImpl#getProgram()
   * @generated
   */
  int PROGRAM = 0;

  /**
   * The feature id for the '<em><b>Movements</b></em>' containment reference list.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int PROGRAM__MOVEMENTS = 0;

  /**
   * The number of structural features of the '<em>Program</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int PROGRAM_FEATURE_COUNT = 1;

  /**
   * The meta object id for the '{@link robotcontrol.roc.impl.MovementImpl <em>Movement</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see robotcontrol.roc.impl.MovementImpl
   * @see robotcontrol.roc.impl.RocPackageImpl#getMovement()
   * @generated
   */
  int MOVEMENT = 1;

  /**
   * The feature id for the '<em><b>Motions</b></em>' containment reference list.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int MOVEMENT__MOTIONS = 0;

  /**
   * The number of structural features of the '<em>Movement</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int MOVEMENT_FEATURE_COUNT = 1;

  /**
   * The meta object id for the '{@link robotcontrol.roc.impl.MotionImpl <em>Motion</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see robotcontrol.roc.impl.MotionImpl
   * @see robotcontrol.roc.impl.RocPackageImpl#getMotion()
   * @generated
   */
  int MOTION = 2;

  /**
   * The feature id for the '<em><b>Action</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int MOTION__ACTION = 0;

  /**
   * The feature id for the '<em><b>Duration</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int MOTION__DURATION = 1;

  /**
   * The feature id for the '<em><b>Duration Unit</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int MOTION__DURATION_UNIT = 2;

  /**
   * The feature id for the '<em><b>Speed</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int MOTION__SPEED = 3;

  /**
   * The number of structural features of the '<em>Motion</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int MOTION_FEATURE_COUNT = 4;

  /**
   * The meta object id for the '{@link robotcontrol.roc.impl.ActionImpl <em>Action</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see robotcontrol.roc.impl.ActionImpl
   * @see robotcontrol.roc.impl.RocPackageImpl#getAction()
   * @generated
   */
  int ACTION = 3;

  /**
   * The feature id for the '<em><b>Action Holder</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int ACTION__ACTION_HOLDER = 0;

  /**
   * The feature id for the '<em><b>Intensity</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int ACTION__INTENSITY = 1;

  /**
   * The number of structural features of the '<em>Action</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int ACTION_FEATURE_COUNT = 2;

  /**
   * The meta object id for the '{@link robotcontrol.roc.impl.CompleteActionImpl <em>Complete Action</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see robotcontrol.roc.impl.CompleteActionImpl
   * @see robotcontrol.roc.impl.RocPackageImpl#getCompleteAction()
   * @generated
   */
  int COMPLETE_ACTION = 4;

  /**
   * The feature id for the '<em><b>Action Name</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int COMPLETE_ACTION__ACTION_NAME = 0;

  /**
   * The number of structural features of the '<em>Complete Action</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int COMPLETE_ACTION_FEATURE_COUNT = 1;

  /**
   * The meta object id for the '{@link robotcontrol.roc.impl.SingleActionImpl <em>Single Action</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see robotcontrol.roc.impl.SingleActionImpl
   * @see robotcontrol.roc.impl.RocPackageImpl#getSingleAction()
   * @generated
   */
  int SINGLE_ACTION = 5;

  /**
   * The feature id for the '<em><b>Action Name</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int SINGLE_ACTION__ACTION_NAME = 0;

  /**
   * The number of structural features of the '<em>Single Action</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int SINGLE_ACTION_FEATURE_COUNT = 1;

  /**
   * The meta object id for the '{@link robotcontrol.roc.impl.DirectedActionImpl <em>Directed Action</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see robotcontrol.roc.impl.DirectedActionImpl
   * @see robotcontrol.roc.impl.RocPackageImpl#getDirectedAction()
   * @generated
   */
  int DIRECTED_ACTION = 6;

  /**
   * The feature id for the '<em><b>Action Name</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int DIRECTED_ACTION__ACTION_NAME = 0;

  /**
   * The feature id for the '<em><b>Direction</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int DIRECTED_ACTION__DIRECTION = 1;

  /**
   * The number of structural features of the '<em>Directed Action</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int DIRECTED_ACTION_FEATURE_COUNT = 2;

  /**
   * The meta object id for the '{@link robotcontrol.roc.impl.LeftRightDirectedActionImpl <em>Left Right Directed Action</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see robotcontrol.roc.impl.LeftRightDirectedActionImpl
   * @see robotcontrol.roc.impl.RocPackageImpl#getLeftRightDirectedAction()
   * @generated
   */
  int LEFT_RIGHT_DIRECTED_ACTION = 7;

  /**
   * The feature id for the '<em><b>Tilt Head</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int LEFT_RIGHT_DIRECTED_ACTION__TILT_HEAD = 0;

  /**
   * The number of structural features of the '<em>Left Right Directed Action</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int LEFT_RIGHT_DIRECTED_ACTION_FEATURE_COUNT = 1;

  /**
   * The meta object id for the '{@link robotcontrol.roc.impl.LeftRightDirectionImpl <em>Left Right Direction</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see robotcontrol.roc.impl.LeftRightDirectionImpl
   * @see robotcontrol.roc.impl.RocPackageImpl#getLeftRightDirection()
   * @generated
   */
  int LEFT_RIGHT_DIRECTION = 8;

  /**
   * The feature id for the '<em><b>Left</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int LEFT_RIGHT_DIRECTION__LEFT = 0;

  /**
   * The feature id for the '<em><b>Right</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int LEFT_RIGHT_DIRECTION__RIGHT = 1;

  /**
   * The number of structural features of the '<em>Left Right Direction</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int LEFT_RIGHT_DIRECTION_FEATURE_COUNT = 2;

  /**
   * The meta object id for the '{@link robotcontrol.roc.impl.FullDirectedActionImpl <em>Full Directed Action</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see robotcontrol.roc.impl.FullDirectedActionImpl
   * @see robotcontrol.roc.impl.RocPackageImpl#getFullDirectedAction()
   * @generated
   */
  int FULL_DIRECTED_ACTION = 9;

  /**
   * The feature id for the '<em><b>Turn Head</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int FULL_DIRECTED_ACTION__TURN_HEAD = 0;

  /**
   * The feature id for the '<em><b>Turn Eyes</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int FULL_DIRECTED_ACTION__TURN_EYES = 1;

  /**
   * The number of structural features of the '<em>Full Directed Action</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int FULL_DIRECTED_ACTION_FEATURE_COUNT = 2;

  /**
   * The meta object id for the '{@link robotcontrol.roc.impl.DirectionImpl <em>Direction</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see robotcontrol.roc.impl.DirectionImpl
   * @see robotcontrol.roc.impl.RocPackageImpl#getDirection()
   * @generated
   */
  int DIRECTION = 10;

  /**
   * The feature id for the '<em><b>UP</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int DIRECTION__UP = 0;

  /**
   * The feature id for the '<em><b>DOWN</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int DIRECTION__DOWN = 1;

  /**
   * The feature id for the '<em><b>LEFT</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int DIRECTION__LEFT = 2;

  /**
   * The feature id for the '<em><b>RIGHT</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int DIRECTION__RIGHT = 3;

  /**
   * The number of structural features of the '<em>Direction</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int DIRECTION_FEATURE_COUNT = 4;

  /**
   * The meta object id for the '{@link robotcontrol.roc.impl.SpeedImpl <em>Speed</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see robotcontrol.roc.impl.SpeedImpl
   * @see robotcontrol.roc.impl.RocPackageImpl#getSpeed()
   * @generated
   */
  int SPEED = 11;

  /**
   * The feature id for the '<em><b>SLOWEST</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int SPEED__SLOWEST = 0;

  /**
   * The feature id for the '<em><b>SLOW</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int SPEED__SLOW = 1;

  /**
   * The feature id for the '<em><b>NORMAL</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int SPEED__NORMAL = 2;

  /**
   * The feature id for the '<em><b>FAST</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int SPEED__FAST = 3;

  /**
   * The feature id for the '<em><b>FULL</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int SPEED__FULL = 4;

  /**
   * The number of structural features of the '<em>Speed</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int SPEED_FEATURE_COUNT = 5;

  /**
   * The meta object id for the '{@link robotcontrol.roc.Intensity <em>Intensity</em>}' enum.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see robotcontrol.roc.Intensity
   * @see robotcontrol.roc.impl.RocPackageImpl#getIntensity()
   * @generated
   */
  int INTENSITY = 12;

  /**
   * The meta object id for the '{@link robotcontrol.roc.DurationUnit <em>Duration Unit</em>}' enum.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see robotcontrol.roc.DurationUnit
   * @see robotcontrol.roc.impl.RocPackageImpl#getDurationUnit()
   * @generated
   */
  int DURATION_UNIT = 13;


  /**
   * Returns the meta object for class '{@link robotcontrol.roc.Program <em>Program</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Program</em>'.
   * @see robotcontrol.roc.Program
   * @generated
   */
  EClass getProgram();

  /**
   * Returns the meta object for the containment reference list '{@link robotcontrol.roc.Program#getMovements <em>Movements</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference list '<em>Movements</em>'.
   * @see robotcontrol.roc.Program#getMovements()
   * @see #getProgram()
   * @generated
   */
  EReference getProgram_Movements();

  /**
   * Returns the meta object for class '{@link robotcontrol.roc.Movement <em>Movement</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Movement</em>'.
   * @see robotcontrol.roc.Movement
   * @generated
   */
  EClass getMovement();

  /**
   * Returns the meta object for the containment reference list '{@link robotcontrol.roc.Movement#getMotions <em>Motions</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference list '<em>Motions</em>'.
   * @see robotcontrol.roc.Movement#getMotions()
   * @see #getMovement()
   * @generated
   */
  EReference getMovement_Motions();

  /**
   * Returns the meta object for class '{@link robotcontrol.roc.Motion <em>Motion</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Motion</em>'.
   * @see robotcontrol.roc.Motion
   * @generated
   */
  EClass getMotion();

  /**
   * Returns the meta object for the containment reference '{@link robotcontrol.roc.Motion#getAction <em>Action</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Action</em>'.
   * @see robotcontrol.roc.Motion#getAction()
   * @see #getMotion()
   * @generated
   */
  EReference getMotion_Action();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.Motion#getDuration <em>Duration</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Duration</em>'.
   * @see robotcontrol.roc.Motion#getDuration()
   * @see #getMotion()
   * @generated
   */
  EAttribute getMotion_Duration();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.Motion#getDurationUnit <em>Duration Unit</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Duration Unit</em>'.
   * @see robotcontrol.roc.Motion#getDurationUnit()
   * @see #getMotion()
   * @generated
   */
  EAttribute getMotion_DurationUnit();

  /**
   * Returns the meta object for the containment reference '{@link robotcontrol.roc.Motion#getSpeed <em>Speed</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Speed</em>'.
   * @see robotcontrol.roc.Motion#getSpeed()
   * @see #getMotion()
   * @generated
   */
  EReference getMotion_Speed();

  /**
   * Returns the meta object for class '{@link robotcontrol.roc.Action <em>Action</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Action</em>'.
   * @see robotcontrol.roc.Action
   * @generated
   */
  EClass getAction();

  /**
   * Returns the meta object for the containment reference '{@link robotcontrol.roc.Action#getActionHolder <em>Action Holder</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Action Holder</em>'.
   * @see robotcontrol.roc.Action#getActionHolder()
   * @see #getAction()
   * @generated
   */
  EReference getAction_ActionHolder();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.Action#getIntensity <em>Intensity</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Intensity</em>'.
   * @see robotcontrol.roc.Action#getIntensity()
   * @see #getAction()
   * @generated
   */
  EAttribute getAction_Intensity();

  /**
   * Returns the meta object for class '{@link robotcontrol.roc.CompleteAction <em>Complete Action</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Complete Action</em>'.
   * @see robotcontrol.roc.CompleteAction
   * @generated
   */
  EClass getCompleteAction();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.CompleteAction#getActionName <em>Action Name</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Action Name</em>'.
   * @see robotcontrol.roc.CompleteAction#getActionName()
   * @see #getCompleteAction()
   * @generated
   */
  EAttribute getCompleteAction_ActionName();

  /**
   * Returns the meta object for class '{@link robotcontrol.roc.SingleAction <em>Single Action</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Single Action</em>'.
   * @see robotcontrol.roc.SingleAction
   * @generated
   */
  EClass getSingleAction();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.SingleAction#getActionName <em>Action Name</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Action Name</em>'.
   * @see robotcontrol.roc.SingleAction#getActionName()
   * @see #getSingleAction()
   * @generated
   */
  EAttribute getSingleAction_ActionName();

  /**
   * Returns the meta object for class '{@link robotcontrol.roc.DirectedAction <em>Directed Action</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Directed Action</em>'.
   * @see robotcontrol.roc.DirectedAction
   * @generated
   */
  EClass getDirectedAction();

  /**
   * Returns the meta object for the containment reference '{@link robotcontrol.roc.DirectedAction#getActionName <em>Action Name</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Action Name</em>'.
   * @see robotcontrol.roc.DirectedAction#getActionName()
   * @see #getDirectedAction()
   * @generated
   */
  EReference getDirectedAction_ActionName();

  /**
   * Returns the meta object for the containment reference '{@link robotcontrol.roc.DirectedAction#getDirection <em>Direction</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Direction</em>'.
   * @see robotcontrol.roc.DirectedAction#getDirection()
   * @see #getDirectedAction()
   * @generated
   */
  EReference getDirectedAction_Direction();

  /**
   * Returns the meta object for class '{@link robotcontrol.roc.LeftRightDirectedAction <em>Left Right Directed Action</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Left Right Directed Action</em>'.
   * @see robotcontrol.roc.LeftRightDirectedAction
   * @generated
   */
  EClass getLeftRightDirectedAction();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.LeftRightDirectedAction#getTiltHead <em>Tilt Head</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Tilt Head</em>'.
   * @see robotcontrol.roc.LeftRightDirectedAction#getTiltHead()
   * @see #getLeftRightDirectedAction()
   * @generated
   */
  EAttribute getLeftRightDirectedAction_TiltHead();

  /**
   * Returns the meta object for class '{@link robotcontrol.roc.LeftRightDirection <em>Left Right Direction</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Left Right Direction</em>'.
   * @see robotcontrol.roc.LeftRightDirection
   * @generated
   */
  EClass getLeftRightDirection();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.LeftRightDirection#getLeft <em>Left</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Left</em>'.
   * @see robotcontrol.roc.LeftRightDirection#getLeft()
   * @see #getLeftRightDirection()
   * @generated
   */
  EAttribute getLeftRightDirection_Left();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.LeftRightDirection#getRight <em>Right</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Right</em>'.
   * @see robotcontrol.roc.LeftRightDirection#getRight()
   * @see #getLeftRightDirection()
   * @generated
   */
  EAttribute getLeftRightDirection_Right();

  /**
   * Returns the meta object for class '{@link robotcontrol.roc.FullDirectedAction <em>Full Directed Action</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Full Directed Action</em>'.
   * @see robotcontrol.roc.FullDirectedAction
   * @generated
   */
  EClass getFullDirectedAction();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.FullDirectedAction#getTurnHead <em>Turn Head</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Turn Head</em>'.
   * @see robotcontrol.roc.FullDirectedAction#getTurnHead()
   * @see #getFullDirectedAction()
   * @generated
   */
  EAttribute getFullDirectedAction_TurnHead();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.FullDirectedAction#getTurnEyes <em>Turn Eyes</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Turn Eyes</em>'.
   * @see robotcontrol.roc.FullDirectedAction#getTurnEyes()
   * @see #getFullDirectedAction()
   * @generated
   */
  EAttribute getFullDirectedAction_TurnEyes();

  /**
   * Returns the meta object for class '{@link robotcontrol.roc.Direction <em>Direction</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Direction</em>'.
   * @see robotcontrol.roc.Direction
   * @generated
   */
  EClass getDirection();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.Direction#getUP <em>UP</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>UP</em>'.
   * @see robotcontrol.roc.Direction#getUP()
   * @see #getDirection()
   * @generated
   */
  EAttribute getDirection_UP();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.Direction#getDOWN <em>DOWN</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>DOWN</em>'.
   * @see robotcontrol.roc.Direction#getDOWN()
   * @see #getDirection()
   * @generated
   */
  EAttribute getDirection_DOWN();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.Direction#getLEFT <em>LEFT</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>LEFT</em>'.
   * @see robotcontrol.roc.Direction#getLEFT()
   * @see #getDirection()
   * @generated
   */
  EAttribute getDirection_LEFT();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.Direction#getRIGHT <em>RIGHT</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>RIGHT</em>'.
   * @see robotcontrol.roc.Direction#getRIGHT()
   * @see #getDirection()
   * @generated
   */
  EAttribute getDirection_RIGHT();

  /**
   * Returns the meta object for class '{@link robotcontrol.roc.Speed <em>Speed</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Speed</em>'.
   * @see robotcontrol.roc.Speed
   * @generated
   */
  EClass getSpeed();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.Speed#getSLOWEST <em>SLOWEST</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>SLOWEST</em>'.
   * @see robotcontrol.roc.Speed#getSLOWEST()
   * @see #getSpeed()
   * @generated
   */
  EAttribute getSpeed_SLOWEST();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.Speed#getSLOW <em>SLOW</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>SLOW</em>'.
   * @see robotcontrol.roc.Speed#getSLOW()
   * @see #getSpeed()
   * @generated
   */
  EAttribute getSpeed_SLOW();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.Speed#getNORMAL <em>NORMAL</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>NORMAL</em>'.
   * @see robotcontrol.roc.Speed#getNORMAL()
   * @see #getSpeed()
   * @generated
   */
  EAttribute getSpeed_NORMAL();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.Speed#getFAST <em>FAST</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>FAST</em>'.
   * @see robotcontrol.roc.Speed#getFAST()
   * @see #getSpeed()
   * @generated
   */
  EAttribute getSpeed_FAST();

  /**
   * Returns the meta object for the attribute '{@link robotcontrol.roc.Speed#getFULL <em>FULL</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>FULL</em>'.
   * @see robotcontrol.roc.Speed#getFULL()
   * @see #getSpeed()
   * @generated
   */
  EAttribute getSpeed_FULL();

  /**
   * Returns the meta object for enum '{@link robotcontrol.roc.Intensity <em>Intensity</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for enum '<em>Intensity</em>'.
   * @see robotcontrol.roc.Intensity
   * @generated
   */
  EEnum getIntensity();

  /**
   * Returns the meta object for enum '{@link robotcontrol.roc.DurationUnit <em>Duration Unit</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for enum '<em>Duration Unit</em>'.
   * @see robotcontrol.roc.DurationUnit
   * @generated
   */
  EEnum getDurationUnit();

  /**
   * Returns the factory that creates the instances of the model.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the factory that creates the instances of the model.
   * @generated
   */
  RocFactory getRocFactory();

  /**
   * <!-- begin-user-doc -->
   * Defines literals for the meta objects that represent
   * <ul>
   *   <li>each class,</li>
   *   <li>each feature of each class,</li>
   *   <li>each enum,</li>
   *   <li>and each data type</li>
   * </ul>
   * <!-- end-user-doc -->
   * @generated
   */
  interface Literals
  {
    /**
     * The meta object literal for the '{@link robotcontrol.roc.impl.ProgramImpl <em>Program</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see robotcontrol.roc.impl.ProgramImpl
     * @see robotcontrol.roc.impl.RocPackageImpl#getProgram()
     * @generated
     */
    EClass PROGRAM = eINSTANCE.getProgram();

    /**
     * The meta object literal for the '<em><b>Movements</b></em>' containment reference list feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference PROGRAM__MOVEMENTS = eINSTANCE.getProgram_Movements();

    /**
     * The meta object literal for the '{@link robotcontrol.roc.impl.MovementImpl <em>Movement</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see robotcontrol.roc.impl.MovementImpl
     * @see robotcontrol.roc.impl.RocPackageImpl#getMovement()
     * @generated
     */
    EClass MOVEMENT = eINSTANCE.getMovement();

    /**
     * The meta object literal for the '<em><b>Motions</b></em>' containment reference list feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference MOVEMENT__MOTIONS = eINSTANCE.getMovement_Motions();

    /**
     * The meta object literal for the '{@link robotcontrol.roc.impl.MotionImpl <em>Motion</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see robotcontrol.roc.impl.MotionImpl
     * @see robotcontrol.roc.impl.RocPackageImpl#getMotion()
     * @generated
     */
    EClass MOTION = eINSTANCE.getMotion();

    /**
     * The meta object literal for the '<em><b>Action</b></em>' containment reference feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference MOTION__ACTION = eINSTANCE.getMotion_Action();

    /**
     * The meta object literal for the '<em><b>Duration</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute MOTION__DURATION = eINSTANCE.getMotion_Duration();

    /**
     * The meta object literal for the '<em><b>Duration Unit</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute MOTION__DURATION_UNIT = eINSTANCE.getMotion_DurationUnit();

    /**
     * The meta object literal for the '<em><b>Speed</b></em>' containment reference feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference MOTION__SPEED = eINSTANCE.getMotion_Speed();

    /**
     * The meta object literal for the '{@link robotcontrol.roc.impl.ActionImpl <em>Action</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see robotcontrol.roc.impl.ActionImpl
     * @see robotcontrol.roc.impl.RocPackageImpl#getAction()
     * @generated
     */
    EClass ACTION = eINSTANCE.getAction();

    /**
     * The meta object literal for the '<em><b>Action Holder</b></em>' containment reference feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference ACTION__ACTION_HOLDER = eINSTANCE.getAction_ActionHolder();

    /**
     * The meta object literal for the '<em><b>Intensity</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute ACTION__INTENSITY = eINSTANCE.getAction_Intensity();

    /**
     * The meta object literal for the '{@link robotcontrol.roc.impl.CompleteActionImpl <em>Complete Action</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see robotcontrol.roc.impl.CompleteActionImpl
     * @see robotcontrol.roc.impl.RocPackageImpl#getCompleteAction()
     * @generated
     */
    EClass COMPLETE_ACTION = eINSTANCE.getCompleteAction();

    /**
     * The meta object literal for the '<em><b>Action Name</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute COMPLETE_ACTION__ACTION_NAME = eINSTANCE.getCompleteAction_ActionName();

    /**
     * The meta object literal for the '{@link robotcontrol.roc.impl.SingleActionImpl <em>Single Action</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see robotcontrol.roc.impl.SingleActionImpl
     * @see robotcontrol.roc.impl.RocPackageImpl#getSingleAction()
     * @generated
     */
    EClass SINGLE_ACTION = eINSTANCE.getSingleAction();

    /**
     * The meta object literal for the '<em><b>Action Name</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute SINGLE_ACTION__ACTION_NAME = eINSTANCE.getSingleAction_ActionName();

    /**
     * The meta object literal for the '{@link robotcontrol.roc.impl.DirectedActionImpl <em>Directed Action</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see robotcontrol.roc.impl.DirectedActionImpl
     * @see robotcontrol.roc.impl.RocPackageImpl#getDirectedAction()
     * @generated
     */
    EClass DIRECTED_ACTION = eINSTANCE.getDirectedAction();

    /**
     * The meta object literal for the '<em><b>Action Name</b></em>' containment reference feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference DIRECTED_ACTION__ACTION_NAME = eINSTANCE.getDirectedAction_ActionName();

    /**
     * The meta object literal for the '<em><b>Direction</b></em>' containment reference feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference DIRECTED_ACTION__DIRECTION = eINSTANCE.getDirectedAction_Direction();

    /**
     * The meta object literal for the '{@link robotcontrol.roc.impl.LeftRightDirectedActionImpl <em>Left Right Directed Action</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see robotcontrol.roc.impl.LeftRightDirectedActionImpl
     * @see robotcontrol.roc.impl.RocPackageImpl#getLeftRightDirectedAction()
     * @generated
     */
    EClass LEFT_RIGHT_DIRECTED_ACTION = eINSTANCE.getLeftRightDirectedAction();

    /**
     * The meta object literal for the '<em><b>Tilt Head</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute LEFT_RIGHT_DIRECTED_ACTION__TILT_HEAD = eINSTANCE.getLeftRightDirectedAction_TiltHead();

    /**
     * The meta object literal for the '{@link robotcontrol.roc.impl.LeftRightDirectionImpl <em>Left Right Direction</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see robotcontrol.roc.impl.LeftRightDirectionImpl
     * @see robotcontrol.roc.impl.RocPackageImpl#getLeftRightDirection()
     * @generated
     */
    EClass LEFT_RIGHT_DIRECTION = eINSTANCE.getLeftRightDirection();

    /**
     * The meta object literal for the '<em><b>Left</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute LEFT_RIGHT_DIRECTION__LEFT = eINSTANCE.getLeftRightDirection_Left();

    /**
     * The meta object literal for the '<em><b>Right</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute LEFT_RIGHT_DIRECTION__RIGHT = eINSTANCE.getLeftRightDirection_Right();

    /**
     * The meta object literal for the '{@link robotcontrol.roc.impl.FullDirectedActionImpl <em>Full Directed Action</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see robotcontrol.roc.impl.FullDirectedActionImpl
     * @see robotcontrol.roc.impl.RocPackageImpl#getFullDirectedAction()
     * @generated
     */
    EClass FULL_DIRECTED_ACTION = eINSTANCE.getFullDirectedAction();

    /**
     * The meta object literal for the '<em><b>Turn Head</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute FULL_DIRECTED_ACTION__TURN_HEAD = eINSTANCE.getFullDirectedAction_TurnHead();

    /**
     * The meta object literal for the '<em><b>Turn Eyes</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute FULL_DIRECTED_ACTION__TURN_EYES = eINSTANCE.getFullDirectedAction_TurnEyes();

    /**
     * The meta object literal for the '{@link robotcontrol.roc.impl.DirectionImpl <em>Direction</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see robotcontrol.roc.impl.DirectionImpl
     * @see robotcontrol.roc.impl.RocPackageImpl#getDirection()
     * @generated
     */
    EClass DIRECTION = eINSTANCE.getDirection();

    /**
     * The meta object literal for the '<em><b>UP</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute DIRECTION__UP = eINSTANCE.getDirection_UP();

    /**
     * The meta object literal for the '<em><b>DOWN</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute DIRECTION__DOWN = eINSTANCE.getDirection_DOWN();

    /**
     * The meta object literal for the '<em><b>LEFT</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute DIRECTION__LEFT = eINSTANCE.getDirection_LEFT();

    /**
     * The meta object literal for the '<em><b>RIGHT</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute DIRECTION__RIGHT = eINSTANCE.getDirection_RIGHT();

    /**
     * The meta object literal for the '{@link robotcontrol.roc.impl.SpeedImpl <em>Speed</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see robotcontrol.roc.impl.SpeedImpl
     * @see robotcontrol.roc.impl.RocPackageImpl#getSpeed()
     * @generated
     */
    EClass SPEED = eINSTANCE.getSpeed();

    /**
     * The meta object literal for the '<em><b>SLOWEST</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute SPEED__SLOWEST = eINSTANCE.getSpeed_SLOWEST();

    /**
     * The meta object literal for the '<em><b>SLOW</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute SPEED__SLOW = eINSTANCE.getSpeed_SLOW();

    /**
     * The meta object literal for the '<em><b>NORMAL</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute SPEED__NORMAL = eINSTANCE.getSpeed_NORMAL();

    /**
     * The meta object literal for the '<em><b>FAST</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute SPEED__FAST = eINSTANCE.getSpeed_FAST();

    /**
     * The meta object literal for the '<em><b>FULL</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute SPEED__FULL = eINSTANCE.getSpeed_FULL();

    /**
     * The meta object literal for the '{@link robotcontrol.roc.Intensity <em>Intensity</em>}' enum.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see robotcontrol.roc.Intensity
     * @see robotcontrol.roc.impl.RocPackageImpl#getIntensity()
     * @generated
     */
    EEnum INTENSITY = eINSTANCE.getIntensity();

    /**
     * The meta object literal for the '{@link robotcontrol.roc.DurationUnit <em>Duration Unit</em>}' enum.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see robotcontrol.roc.DurationUnit
     * @see robotcontrol.roc.impl.RocPackageImpl#getDurationUnit()
     * @generated
     */
    EEnum DURATION_UNIT = eINSTANCE.getDurationUnit();

  }

} //RocPackage public interface SingleAction extends EObject
{
  /**
   * Returns the value of the '<em><b>Action Name</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Action Name</em>' attribute isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Action Name</em>' attribute.
   * @see #setActionName(String)
   * @see robotcontrol.roc.RocPackage#getSingleAction_ActionName()
   * @model
   * @generated
   */
  String getActionName();

  /**
   * Sets the value of the '{@link robotcontrol.roc.SingleAction#getActionName <em>Action Name</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Action Name</em>' attribute.
   * @see #getActionName()
   * @generated
   */
  void setActionName(String value);

} // SingleAction public abstract class AbstractRocValidator extends AbstractDeclarativeValidator {
	
	@Override
	protected List<EPackage> getEPackages() {
		List<EPackage> result = new ArrayList<EPackage>();
		result.add(robotcontrol.roc.RocPackage.eINSTANCE);
		return result;
	}
	
}
import com.google.common.base.Objects;
import java.util.HashMap;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.xtext.validation.Check;
import org.eclipse.xtext.xbase.lib.Pair;
import robotcontrol.roc.Action;
import robotcontrol.roc.CompleteAction;
import robotcontrol.roc.DirectedAction;
import robotcontrol.roc.Direction;
import robotcontrol.roc.DurationUnit;
import robotcontrol.roc.FullDirectedAction;
import robotcontrol.roc.LeftRightDirectedAction;
import robotcontrol.roc.Motion;
import robotcontrol.roc.Movement;
import robotcontrol.roc.RocPackage;
import robotcontrol.roc.SingleAction;
import robotcontrol.validation.AbstractRocValidator;
/**
 * generated by Xtext 2.10.0
 */
package robotcontrol.validation;


/**
 * This class contains custom validation rules.
 * 
 * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#validation
 */
@SuppressWarnings("all")
public class RocValidator extends AbstractRocValidator {
  public final static String INVALID_NAME = "invalidName";
  
  /**
   * Checks a movement for physical constraint violations.
   * A possible violations could be moving the same head feature in different direction in a single motion.
   */
  @Check
  public void checkMovementContraints(final Movement movement) {
    final HashMap<String, Boolean> actionMap = new HashMap<String, Boolean>();
    final HashMap<Pair<String, String>, Boolean> directedActionMap = new HashMap<Pair<String, String>, Boolean>();
    EList<Motion> _motions = movement.getMotions();
    for (final Motion motion : _motions) {
      {
        Action _action = motion.getAction();