tmpJSONParser.js 4.09 KB
(function(tmpJSONParser, $, undefined) {

  var base_parameter_json = {};
  var movement_parameter_json = {};

  function _setupBaseParameterJSON(tmpJSON) {
    base_parameter_json['userId'] = tmpJSON['userId'];
    base_parameter_json['sinal'] = tmpJSON['sinal'];
    base_parameter_json['interpolacao'] = 'normal';
    base_parameter_json['movimentos'] = [];
    movement_parameter_json = {
      'facial': {},
      'mao_direita': {},
      'mao_esquerda': {}
    };
    base_parameter_json['movimentos'].push(movement_parameter_json);
  }

  function _parseParameterValue(value) {
	if (typeof value == 'string' && value.toLowerCase() == 'true') {
		return true;
	} else if (typeof value == 'string' && value.toLowerCase() == 'false') {
		return false;
	} else {
		return !isNaN(value) ? parseInt(value) : value;
	}
  }

  function _parseTempFacialParameterJSON(tmpJSON) {
    var attrs = dynworkflow.getFacialParameters();
    for (var i in attrs) {
      var attr = attrs[i];
      parameterValue = tmpJSON['facial'][attr][0];
      movement_parameter_json['facial'][attr] = _parseParameterValue(parameterValue);
    }
  }
  
  function _parseHand(hand) {
	var parsedHand = hand == 'right-hand' ? 'mao_direita' : hand;
	parsedHand = hand == 'left-hand' ? 'mao_esquerda' : parsedHand;
	return parsedHand;
  }
  
  // Default parser
  function _defaultMovementParser(tmpJSON, movementName, hand) {
	var attrs = dynworkflow.getMovementParameters(movementName);
	var parsedHand = _parseHand(hand);
	
	for (var i in attrs) {
	    var attr = attrs[i];
	    var parameterValue = '';
	    if (typeof tmpJSON[hand][attr] == "undefined") {
	    	continue;
	    }
	    if (attr == 'configuracao') {
	      parameterValue = tmpJSON[hand][attr][1];
	    } else if (attr == 'articulacao') {
	      parameterValue = articulation.processValue(hand, tmpJSON[hand][attr]);
	    } else {
	      parameterValue = tmpJSON[hand][attr][0];
	    }
	    movement_parameter_json[parsedHand][movementName][attr] =
	      _parseParameterValue(parameterValue);
	}
  }
	
  function _retilinearMovementParser(tmpJSON, movementName, hand) {
	var attrs = dynworkflow.getMovementParameters(movementName);
	var parsedHand = _parseHand(hand);
	
	for (var i in attrs) {
	    var attr = attrs[i];
	    var initParameterValue = '';
	    var endParameterValue = '';
	    if (attr == 'configuracao-retilineo') {
	      initParameterValue = tmpJSON[hand][attr][1];
	      endParameterValue = tmpJSON[hand][attr][3];
	    } else if (attr == 'articulacao-retilineo') {
	      initSlice = tmpJSON[hand][attr].slice(0, 2);
	      endSlice = tmpJSON[hand][attr].slice(2, 4);
	      initParameterValue =  articulation.processValue(hand, initSlice);
	      endParameterValue =  articulation.processValue(hand, endSlice);
	    } else {
	      initParameterValue = tmpJSON[hand][attr][0];
	      endParameterValue = tmpJSON[hand][attr][1];
	    }
	    attr = attr.replace('-retilineo', '');
	    var initAttr = attr + '_inicial';
	    var endAttr = attr + '_final';
	    movement_parameter_json[parsedHand][movementName][initAttr] =
	      _parseParameterValue(initParameterValue);
	    movement_parameter_json[parsedHand][movementName][endAttr] =
		      _parseParameterValue(endParameterValue);
	}
  }
  
  function _parseTempMovementParameterJSON(tmpJSON, hand) {
    var movimentConfig = tmpJSON[hand]['movimento'];
    if (typeof movimentConfig == 'undefined') return;

    var movementName = movimentConfig[0];
    var parsedHand = _parseHand(hand);
    movement_parameter_json[parsedHand][movementName] = {};
    
    if (movementName == 'retilineo') {
    	_retilinearMovementParser(tmpJSON, movementName, hand);
    } else {
    	_defaultMovementParser(tmpJSON, movementName, hand);
    }
  }

  tmpJSONParser.parse = function(tmpJSON, rightHand, leftHand) {
    _setupBaseParameterJSON(tmpJSON);
    _parseTempFacialParameterJSON(tmpJSON);
    if (rightHand) {
        _parseTempMovementParameterJSON(tmpJSON, 'right-hand');
    }
    if (leftHand) {
    	_parseTempMovementParameterJSON(tmpJSON, 'left-hand');	
    }    
    return base_parameter_json;
  };

}(window.tmpJSONParser = window.tmpJSONParser || {}, jQuery));