class Rock::Inspect
Attributes
debug[RW]
Public Class Methods
deployment_match?(deployment,pattern,filter = Hash.new)
click to toggle source
# File lib/rock/rock_inspect.rb, line 258 def self.deployment_match?(deployment,pattern,filter = Hash.new) return false if (!(deployment.name =~ pattern)) return false if (filter.has_key?(:deployments) && !(deployment.name =~ filter[:deployments])) return false if (deployment.task_activities.all?{|t| !( task_match?(t.task_model,//,filter))}) true end
find(pattern,filter = Hash.new)
click to toggle source
# File lib/rock/rock_inspect.rb, line 79 def self.find(pattern,filter = Hash.new) options, filter = Kernel::filter_options(filter,[:no_types,:no_ports,:no_tasks,:no_deployments,:no_projects,:no_plugins,:no_plugins,:no_widgets]) result = Array.new #search for types #we are not searching for types all the time if !options[:no_types] reg = filter.has_key?(:types) ? filter[:types] : pattern reg = /./ unless reg result += Rock::Inspect::find_types(/#{reg}/,filter) end #search for ports if !options[:no_ports] reg = filter.has_key?(:ports) ? filter[:ports] : pattern reg = /./ unless reg result += Rock::Inspect::find_ports(/#{reg}/,filter) end #search for tasks if !options[:no_tasks] reg = (filter[:tasks] || pattern || /./) result += Rock::Inspect::find_tasks(/#{reg}/, filter) end #search for deployments if !options[:no_deployments] reg = filter.has_key?(:deployments) ? filter[:deployments] : pattern reg = /./ unless reg result += Rock::Inspect::find_deployments(/#{reg}/,filter) end #search for plugins if !options[:no_plugins] reg = filter.has_key?(:plugins) ? filter[:plugins] : pattern reg = /./ unless reg result += Rock::Inspect::find_plugins(/#{reg}/, filter) end # Search for projects that have no tasks, but only deployments defined # Last entry before producing the result, to allow operation on the # already contrained project list if !options[:no_projects] reg = filter.has_key?(:projects) ? filter[:projects] : pattern reg = /./ unless reg result += Rock::Inspect::find_projects(/#{reg}/,filter) end result.uniq.sort_by(&:name) end
find_deployments(pattern,filter=Hash.new)
click to toggle source
# File lib/rock/rock_inspect.rb, line 191 def self.find_deployments(pattern,filter=Hash.new) found = [] filter,unkown = Kernel::filter_options(filter,[:types,:ports,:tasks,:deployments]) return found if !unkown.empty? orogen_loader.each_available_project_name do |project_name| project = load_orogen_project(orogen_loader, project_name, Rock::Inspect::debug) project.deployers.values.each do |deployer| if pattern === deployer.name || pattern === project.name || deployer.task_activities.find { |t| pattern === t.name || pattern === t.task_model.name } found << SearchItem.new(:name => "Deployment::#{deployer.name}", :project_name => project_name, :object => deployer) end end end found.sort_by{|t|t.name} end
find_plugins(pattern,filter=Hash.new)
click to toggle source
# File lib/rock/rock_inspect.rb, line 243 def self.find_plugins(pattern,filter=Hash.new) found = [] filter,unkown = Kernel::filter_options(filter,[:plugin_name,:types]) return found if !unkown.empty? specs = Vizkit.default_loader.plugin_specs specs.each_value do |spec| next if filter.has_key?(:plugin_name) && nil == (spec.plugin_name =~ filter[:plugin_name]) if((spec2 = spec.callback_specs.find(){|callback|callback.argument =~ pattern}) || spec.plugin_name =~ pattern) next if filter.has_key?(:types) && (!spec2 ||nil == (spec2.argument =~ filter[:types])) found << SearchItem.new(:name => spec.plugin_name, :object => spec) end end found.sort_by{|t|t.name} end
find_ports(pattern,filter = Hash.new)
click to toggle source
# File lib/rock/rock_inspect.rb, line 151 def self.find_ports(pattern,filter = Hash.new) found = [] filter,unkown = Kernel::filter_options(filter,[:types,:ports]) return found if !unkown.empty? #find all tasks which are matching the pattern orogen_loader.each_available_task_model_name.each do |name, project_name| if tasklib = load_orogen_project(orogen_loader, project_name, Rock::Inspect::debug) tasklib.self_tasks.each_value do |task| task.each_port do |port| if(port_match?(port,pattern,filter)) found << SearchItem.new(:name => "Port::#{port.name}", :project_name => project_name, :object => port) break end end end end end found.sort_by{|t|t.name} end
find_projects(pattern, filter=Hash.new)
click to toggle source
# File lib/rock/rock_inspect.rb, line 210 def self.find_projects(pattern, filter=Hash.new) found = [] filter,unknown = Kernel::filter_options(filter,[:types,:ports,:tasks,:deployments,:projects]) return found if !unknown.empty? # Check whether there have been already search filters set, # meaning that the resulting project list should be a subset of those use_whitelist = false if !(filter.has_key?(:projects) && filter.size == 1) use_whitelist = true end # Either use all available projects or subset, as defined by the previous contrains if use_whitelist projects = found.map(&:name) else projects = orogen_loader.each_available_project_name.to_a end projects.each do |name| if project_match?(name,pattern,filter) if tasklib = load_orogen_project(orogen_loader, name, Rock::Inspect::debug) tasklib.deployers.each do |deployment| found << SearchItem.new(:name => "Deployment::#{deployment.name}", :project_name => name, :object => deployment) end end end end found.sort_by{|t|t.name} end
find_tasks(pattern,filter = Hash.new)
click to toggle source
# File lib/rock/rock_inspect.rb, line 130 def self.find_tasks(pattern,filter = Hash.new) found = [] filter,unkown = Kernel::filter_options(filter,[:types,:ports,:tasks]) return found if !unkown.empty? #find all tasks which are matching the pattern orogen_loader.each_available_task_model_name do |name, project_name| if name =~ pattern || project_name =~ pattern if tasklib = load_orogen_project(orogen_loader, project_name, Rock::Inspect::debug) task = tasklib.self_tasks.values.find { |t| t.name == name } if(task_match?(task,pattern,filter)) found << SearchItem.new(:name => "TaskContext::#{task.name}", :project_name => project_name, :object => task) end end end end found.sort_by{|t|t.name} end
find_types(pattern,filter = Hash.new)
click to toggle source
# File lib/rock/rock_inspect.rb, line 173 def self.find_types(pattern,filter = Hash.new) found = Array.new filter,unkown = Kernel::filter_options(filter,[:types]) return found if !unkown.empty? orogen_loader.each_available_type_name do |type_name, typekit_name, exported| if pattern === type_name orogen_loader.typekit_model_from_name(typekit_name) object = orogen_loader.resolve_type(type_name) if type_match?(object,pattern,filter) found << SearchItem.new(:name => "Type::#{type_name}", :project_name => typekit_name, :object => object) end end end found.sort_by{|t|t.name} end
load_orogen_project(loader, name, debug)
click to toggle source
# File lib/rock/rock_inspect.rb, line 65 def self.load_orogen_project(loader, name, debug) begin loader.project_model_from_name(name) rescue Interrupt; raise rescue Exception => e if Rock::Inspect::debug raise end Orocos.warn "cannot load the installed oroGen project #{name}" Orocos.warn " #{e.message}" nil end end
load_orogen_typekit(loader, name, debug)
click to toggle source
# File lib/rock/rock_inspect.rb, line 51 def self.load_orogen_typekit(loader, name, debug) begin loader.typekit_model_from_name(name) rescue Interrupt; raise rescue Exception => e if Rock::Inspect::debug raise end Orocos.warn "cannot load the installed oroGen typekit #{name}" Orocos.warn " #{e.message}" nil end end
orogen_loader()
click to toggle source
# File lib/rock/rock_inspect.rb, line 42 def self.orogen_loader if !@orogen_loader loader = OroGen::Loaders::PkgConfig.new(OroGen.orocos_target) OroGen::Loaders::RTT.setup_loader(loader) @orogen_loader = loader end @orogen_loader end
port_match?(port,pattern,filter = Hash.new)
click to toggle source
# File lib/rock/rock_inspect.rb, line 275 def self.port_match?(port,pattern,filter = Hash.new) return false if (!(port.name =~ pattern) && !(port.type_name =~ pattern)) return false if (filter.has_key?(:tasks) && !(port.task.name =~ filter[:tasks])) return false if (filter.has_key?(:ports) && !(port.name =~ filter[:ports])) return false if (filter.has_key?(:types) && !(port.type_name =~ filter[:types])) true end
project_match?(project_name,pattern,filter = Hash.new)
click to toggle source
# File lib/rock/rock_inspect.rb, line 265 def self.project_match?(project_name,pattern,filter = Hash.new) return true if (project_name =~ pattern) return true if (filter.has_key?(:projects) && (project_name =~ filter[:projects])) false end
task_match?(task,pattern,filter= Hash.new)
click to toggle source
# File lib/rock/rock_inspect.rb, line 283 def self.task_match?(task,pattern,filter= Hash.new) return false unless task.name =~ pattern return false if(filter.has_key?(:tasks) && !(task.name =~ filter[:tasks])) has_port = false #we have to disable the filter :task otherwise there will be trouble with subclasses old = filter.delete :tasks task.each_port {|port| has_port = true if(port_match?(port,//,filter))} return false if !has_port filter[:tasks] = old if old if filter.has_key? :types has_type= false task.each_port {|port| has_type = true if(port.type_name =~ filter[:types])} task.each_property {|property| has_type = true if(property.type_name.to_s =~ filter[:types])} task.each_attribute {|attribute| has_type = true if(attribute.type_name.to_s =~ filter[:types])} return false if !has_type end #return false if(filter.has_key?(:deployments) && !(task.name =~ filter[:tasks])) true end
type_match?(type,pattern,filter = Hash.new)
click to toggle source
# File lib/rock/rock_inspect.rb, line 271 def self.type_match?(type,pattern,filter = Hash.new) true end