Class: ResourceObject

Inherits:
ACL_Object show all
Defined in:
lib/resource_object.rb

Instance Attribute Summary

Attributes inherited from ACL_Object

#col_path, #doc

Instance Method Summary collapse

Methods inherited from ACL_Object

#add_membership, #del_membership, #delete, #find_parents

Constructor Details

#initialize(connector, col_path, report = false) ⇒ ResourceObject

Returns a new instance of ResourceObject.



2
3
4
5
# File 'lib/resource_object.rb', line 2

def initialize(connector, col_path, report = false)
  super(connector, col_path, report)
  @doc = "doc(\"#{@col_path}ResourceObjects.xml\")"
end

Instance Method Details

#change_address(type, address, new_address) ⇒ Object



200
201
202
# File 'lib/resource_object.rb', line 200

def change_address(type, address, new_address)
  change(type, address, "address", new_address)
end

#change_owner(type, address, new_owner) ⇒ Object



204
205
206
# File 'lib/resource_object.rb', line 204

def change_owner(type, address, new_owner)
  change(type, address, "owner", new_owner)
end

#change_type(type, address, new_type) ⇒ Object



196
197
198
# File 'lib/resource_object.rb', line 196

def change_type(type, address, new_type)
  change(type, address, "type", new_type)
end

#create_new(type, address, owner) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/resource_object.rb', line 105

def create_new(type, address, owner)
  address.delete!('(")')
  id = find_res_ob(type, address)
  if(id == nil) #this resOb doesnt exist
    id = "r" + Random.rand(1000000000).to_s
    while(exists?(id))
      id = "r" + Random.rand(1000000000).to_s
    end
    expr = generate_expr(id, type, address, owner)
    expr_loc = "#{@doc}//#{self.class.name}s/#{self.class.name}[last()]"
    #puts expr_loc
    @connector.update_insert(expr, "following", expr_loc)
    if(exists?(id))
      puts "New #{self.class.name} \"#{id}\" created." if @report
      return id
    else
      raise RubyACLException.new(self.class.name, __method__, 
        "#{self.class.name} type=\"#{type}\", address=\"#{address}\" was not able to create.", 33), caller
    end
  else #already exists
    puts "#{self.class.name} \"#{id}\" was already created created." if @report
    return id
  end
end

#find_res_ob(type, address) ⇒ Object

finds resource object’s id by type and address



130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/resource_object.rb', line 130

def find_res_ob(type, address)    #finds resource object's id by type and address
  address.delete!('(")')
  query = "#{@doc}//#{self.class.name}s/descendant::*[type=\"#{type}\" and address=\"#{address}\"]/string(@id)"
  #puts query
  handle = @connector.execute_query(query)
  hits = @connector.get_hits(handle)
  #puts hits
  case hits
  when 1
    res_ob_id = @connector.retrieve(handle, 0)
    if(res_ob_id == "")   #eXist returns empty result => should return no result
      return nil
    else
      return res_ob_id
    end
    
  when 0
    return nil
  else
    raise RubyACLException.new(self.class.name, __method__, 
      "#{self.class.name}(type=\"#{type}\", address=\"#{address}\") exists more then once. (#{hits}x)", 30), caller
  end
end

#find_res_ob_parents(res_ob_type, res_ob_adr) ⇒ Object

finds membership parrent, e.g. dog’s parrent is mammal



161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/resource_object.rb', line 161

def find_res_ob_parents(res_ob_type, res_ob_adr)   
  ids = Array.new    
  while(res_ob_adr.rindex("/") != 0)
    res_ob_adr = parent(res_ob_adr)
    #puts res_ob_adr 
    ids.push(find_res_ob(res_ob_type, res_ob_adr))      
  end
  #puts "ids #{ids.to_s}"
  ids.compact!
  #puts "ids #{ids.to_s}"
  return ids
rescue => e
  raise e
end

#ge(temp_ace, final_ace, grid) ⇒ Object



154
155
156
157
158
# File 'lib/resource_object.rb', line 154

def ge(temp_ace, final_ace, grid)
  temp = grid.find_index(temp_ace.res_obj)
  final = grid.find_index(final_ace.res_obj)
  return super(temp, final)
end

#renameObject

Raises:

  • (RubyACLException.new(self.class.name, __method__, "Rename method is not supported for resource object", 35))


191
192
193
194
# File 'lib/resource_object.rb', line 191

def rename()
  raise RubyACLException.new(self.class.name, __method__, 
    "Rename method is not supported for resource object", 35), caller
end

#res_obs_grand2children(res_ob_ids) ⇒ Object

finds resOb, which ends with /*



177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/resource_object.rb', line 177

def res_obs_grand2children(res_ob_ids)
  ids = Array.new    
  for res_ob_id in res_ob_ids
    adr = get_adr(res_ob_id)
    type = get_type(res_ob_id)
    adr += "/*"  
    ids.push(find_res_ob(type, adr))      
  end
  ids.compact!
  return ids
rescue => e
  raise e
end