/*
 * generated by Xtext 2.11.0
 */
package org.eclipse.osbp.xtext.action.validation

import org.eclipse.osbp.runtime.common.keystroke.KeyCodeUtil
import org.eclipse.osbp.xtext.action.ActionCommand
import org.eclipse.osbp.xtext.action.ActionDSLPackage
import org.eclipse.xtext.validation.Check

/**
 * This class contains custom validation rules. 
 *
 * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#validation
 */
class ActionDSLValidator extends AbstractActionDSLValidator {
	
	public static val INVALID_KEY = 'invalidKey'

	@Check
	def checkKeyBinding(ActionCommand command) {
		if(command.hasKeyBinding) {
			var error = false
			var parts = command.keyBinding.split(" ")
			for(part:parts) {
				if(part.equals(parts.last)) {
					if (KeyCodeUtil.keyLookupInteger(part) == 0) {
						error = true
					}
				} else {
					if (KeyCodeUtil.modifierLookup(part) == 0) {
						error = true
					}
				}
				if(error) {
					warning('Invalid key given for keyBinding. Modifier must be one of CTRL ALT SHIFT, Keys separated by blanks', 
							ActionDSLPackage.Literals.ACTION_COMMAND__KEY_BINDING,
							INVALID_KEY)
				}
			}
		}
	}
	
}
