Class: UU::OS::CMD::CommandContext

Inherits:
Application::UseCaseContext show all
Defined in:
uu_os_cmd-server-2.5.1/lib/uu/os/cmd/command_context.rb

Overview

Use case execution context.

Direct Known Subclasses

CommandCallbackContext

Constant Summary

Instance Attribute Summary

Attributes inherited from Application::UseCaseContext

#parameters, #session, #uu_uri

Instance Method Summary (collapse)

Instance Method Details

- (Object) invoke_async(queue, session = nil, options = {})

Method for invocation of asynchronous part of asynchronous command. Asynchronous part is always invoked under the same user who invoked synchronous part (initial user).

Parameters:

  • queue (URI, String)

    URI of queue for invocation of asynchronous commands.

  • session (UU::OS::Security::Session) (defaults to: nil)

    Instance of session object representing user allowed to use given queue (user allowed to plan invocation of asynchronous part). If not set, session representing currently authenticated user will be used. This parameter does not affect user under which asynchronous part is invoked (it is always invoked under the same user who invoked synchronous part).

  • options (Hash) (defaults to: {})

    Additional invocation options.

Options Hash (options):

  • :parameters (Hash)

    Parameters to use for invocation of asynchronous part. If not set, the same parameters as for invocation of synchronous part will be used.

Returns:

  • (Object)

    Object representing asynchronous task to be returned to client (and/or used in invoke_async_status method).



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'uu_os_cmd-server-2.5.1/lib/uu/os/cmd/command_context.rb', line 91

def invoke_async(queue, session = nil, options = {})
  if @forbid_async
    raise UU::OS::CMD::CommandError.new(UU::OS::IPC::ErrorKind::SERVER, UU::OS::CMD::ErrorCodes::UNEXPECTED_PROBLEM,
      "Calling invoke_async is not allowed for synchronous uuCommand.")
  end
  session, options = nil, session if session.kind_of?(Hash)
  qualified_use_case_code = URI.split(request.url)[5]
  qualified_use_case_code.gsub!(/(^\/)|(\/$)/, '')
  parts = qualified_use_case_code.split('/')
  action = parts.delete_at(-1)
  app_url_code = parts.delete_at(0)
  cmd_url_path = parts.join('/')

  params = {}
  params[:queue_uri] = queue
  params[:app_url_code] = app_url_code
  params[:cmd_url_path] = cmd_url_path
  params[:action] = action
  params[:parameters] = options[:parameters] || parameters
  params[:callback] = @callback
  params[:session] = @session
  client = UU::OS::CMD::CommandExecutor.new(session || get_credentials)
  task_uri = client.invoke(uu_uri, params)
  return {future: true, taskUri: task_uri, appUrlCode: app_url_code, cmdUrlPath: cmd_url_path,
    action: action, uuUri: uu_uri}
end

- (Object) invoke_async_status(task_ref, session = nil)

Method for checking actual status of asynchronous task.

Parameters:

  • task_ref (URI, String, Object)

    URI of asynchronous task or object returned by invoke_async method.

  • session (UU::OS::Security::Session) (defaults to: nil)

    Instance of session object representing user allowed to use queue where the task is executed. If not set, session representing currently authenticated user will be used.

Returns:

  • (Object)

    Object representing status of asynchronous task.



126
127
128
129
130
131
132
133
134
# File 'uu_os_cmd-server-2.5.1/lib/uu/os/cmd/command_context.rb', line 126

def invoke_async_status(task_ref, session = nil)
  if @forbid_async
    raise UU::OS::CMD::CommandError.new(UU::OS::IPC::ErrorKind::SERVER, UU::OS::CMD::ErrorCodes::UNEXPECTED_PROBLEM,
      "Calling invoke_async_status is not allowed for synchronous uuCommand.")
  end
  task_uri = task_ref.kind_of?(Hash) ? task_ref[:taskUri] : task_ref
  client = UU::OS::CMD::CommandExecutor.new(session || get_credentials)
  return client.get_state(task_uri)
end

- (Object) prepare_callback(action, session = nil, options = {})

Prepares callback object to be used in UU::OS::CMD::CommandClient.

Parameters:

  • action (Symbol, String)

    Action to be invoked as callback handler.

  • session (UU::OS::Security::Session) (defaults to: nil)

    Instance of session representing user to be used for callback invocation. If not set, callback will be invoked under the same user who invoked command in which callback is prepared (initial user).

  • options (Hash) (defaults to: {})

    Additional callback options.

Options Hash (options):

  • :parameters (Hash)

    Parameters to send to callback handler.

Returns:

Raises:

  • (ArgumentError)


45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'uu_os_cmd-server-2.5.1/lib/uu/os/cmd/command_context.rb', line 45

def prepare_callback(action, session = nil, options = {})
  raise ArgumentError, 'action is not set' if action.nil? || action.empty?
  session, options = nil, session if session.kind_of?(Hash)

  qualified_use_case_code = URI.split(request.url)[5]
  qualified_use_case_code.gsub!(/(^\/)|(\/$)/, '')
  parts = qualified_use_case_code.split('/')
  parts.delete_at(-1) # Remove original action
  app_url_code = parts.delete_at(0)
  cmd_url_path = parts.join('/')

  callback = {}
  callback[:appUrlCode] = app_url_code
  callback[:cmdUrlPath] = cmd_url_path
  callback[:action] = to_camel_case(action)
  callback[:mainObjectUri] = uu_uri
  ses = session || @session
  if ses.kind_of?Hash
    callback[:authToken] = ses[:accessToken]
  elsif ses.respond_to?(:access_token)
    callback[:authToken] = ses.access_token
  elsif ses.kind_of?(String)
    callback[:authToken] = ses
  end
  callback[:parameters] = options[:parameters] if !options.nil?
  return callback
end