public ActionParameter(IO.Swagger.Model.ActionParameterMeta actionParameterMetadata, Action action, object value)
        {
            ActionParameterMetadata = new ActionParameterMetadata(actionParameterMetadata);
            Id     = ActionParameterMetadata.Name;
            Type   = ActionParameterMetadata.Type;
            Action = action;

            switch (Type)
            {
            case "relative_pose":
                SetValue((IO.Swagger.Model.Pose)value);
                break;

            case "integer_enum":
            case "integer":
                SetValue((int)value);
                break;

            case "string_enum":
            case "pose":
            case "joints":
            case "string":
                SetValue((string)value);
                break;

            case "double":
                SetValue((double)value);
                break;
            }
        }
        /// <summary>
        /// Creates action parameter based on it's metadata, parent action and action paramater swagger model.
        /// </summary>
        /// <param name="actionParameterMetadata"></param>
        /// <param name="action"></param>
        /// <param name="value"></param>
        public ActionParameter(IO.Swagger.Model.ActionParameterMeta actionParameterMetadata, Action action, string value)
        {
            Debug.Assert(value != null);
            ActionParameterMetadata = new ActionParameterMetadata(actionParameterMetadata);
            Id     = ActionParameterMetadata.Name;
            Type   = ActionParameterMetadata.Type;
            Action = action;
            Value  = value;

            /* else {
             *  switch (Type) {
             *      case "relative_pose":
             *          //SetValue(Regex.Replace(new IO.Swagger.Model.Pose(orientation: new IO.Swagger.Model.Orientation(), position: new IO.Swagger.Model.Position()).ToJson(), @"\t|\n|\r", ""));
             *          SetValue(new IO.Swagger.Model.Pose(orientation: new IO.Swagger.Model.Orientation(), position: new IO.Swagger.Model.Position()));
             *          break;
             *      case "integer_enum":
             *          if (ActionParameterMetadata.DefaultValue != null)
             *              Value = ActionParameterMetadata.DefaultValue;
             *          else
             *              SetValue(((ARServer.Models.IntegerEnumParameterExtra) ActionParameterMetadata.ParameterExtra).AllowedValues[0].ToString());
             *          break;
             *      case "string_enum":
             *          if (ActionParameterMetadata.DefaultValue != null)
             *              Value = ActionParameterMetadata.DefaultValue;
             *          else
             *              SetValue(((ARServer.Models.StringEnumParameterExtra) ActionParameterMetadata.ParameterExtra).AllowedValues[0]);
             *          break;
             *      case "pose":
             *          List<string> poses = new List<string>(action.ActionPoint.GetPoses().Keys);
             *          if (poses.Count == 0) {
             *              SetValue("");
             *              //TODO: where to get valid ID?
             *          } else {
             *              SetValue(action.ActionPoint.ActionObject.Data.Id + "." + action.ActionPoint.Data.Id + "." + poses[0]);
             *          }
             *          break;
             *      case "joints":
             *          List<string> joints = new List<string>(action.ActionPoint.GetJoints().Keys);
             *          if (joints.Count == 0) {
             *              SetValue("");
             *              //TODO: where to get valid ID?
             *          } else {
             *              SetValue(action.ActionPoint.ActionObject.Data.Id + "." + action.ActionPoint.Data.Id + "." + joints[0]);
             *          }
             *          break;
             *      default:
             *          Value = ActionParameterMetadata.DefaultValue;
             *          break;
             *
             *  }
             * }*/
        }