Execute command

		:param command_tokens: command tokens to execute
		:param command_context: command context
		:param command_env: command environment
		:return: WCommandResultProto

def exec(self, *command_tokens, command_context=None, **command_env):
		""" Execute command

		:param command_tokens: command tokens to execute
		:param command_context: command context
		:param command_env: command environment
		:return: WCommandResultProto
		"""
		if self.adapter().match(command_context, **command_env) is False:
			cmd = WCommandProto.join_tokens(*command_tokens)
			spec = self.adapter().specification()
			if spec is not None:
				spec = [x.context_name() for x in spec]
				spec.reverse()
				spec = ','.join(spec)
			raise RuntimeError('Command mismatch: %s (context: %s)' % (cmd, spec))

		command_tokens = self.adapter().adapt(*command_tokens, command_context=command_context, **command_env)
		return self.original_command().exec(*command_tokens, command_context=command_context, **command_env)