class TaskJuggler::PTNProxy

This class provides objects that represent PropertyTreeNode objects that were adopted (directly or indirectly) in their new parental context. Such objects are used as elements of a PropertyList which can only hold each PropertyTreeNode objects once. By using this class, we can add such objects more than once, each time with a new parental context that was created by an adoption.

Attributes

parent[R]

Public Class Methods

new(ptn, parent) click to toggle source
# File lib/taskjuggler/PTNProxy.rb, line 25
def initialize(ptn, parent)
  @ptn = ptn
  raise "Adopted properties must have a parent" unless parent
  @parent = parent
  @indext =  nil
  @tree = nil
  @level = -1
end

Public Instance Methods

[](attribute, scenarioIdx) click to toggle source
# File lib/taskjuggler/PTNProxy.rb, line 72
def [](attribute, scenarioIdx)
  if attribute == 'index'
    @index
  elsif attribute == 'tree'
    @tree
  else
    @ptn[attribute, scenarioIdx]
  end
end
get(attribute) click to toggle source
# File lib/taskjuggler/PTNProxy.rb, line 62
def get(attribute)
  if attribute == 'index'
    @index
  elsif attribute == 'tree'
    @tree
  else
    @ptn.get(attribute)
  end
end
getIndicies() click to toggle source

Return the 'index' attributes of this property, prefixed by the 'index' attributes of all its parents. The result is an Array of Fixnums.

# File lib/taskjuggler/PTNProxy.rb, line 107
def getIndicies
  idcs = []
  p = self
  begin
    parent = p.parent
    idcs.insert(0, p.get('index'))
    p = parent
  end while p
  idcs
end
isChildOf?(ancestor) click to toggle source

Find out if this property is a direct or indirect child of ancestor.

# File lib/taskjuggler/PTNProxy.rb, line 97
def isChildOf?(ancestor)
  parent = self
  while parent = parent.parent
    return true if (parent == ancestor)
  end
  false
end
is_a?(type) click to toggle source
# File lib/taskjuggler/PTNProxy.rb, line 128
def is_a?(type)
  @ptn.is_a?(type)
end
level() click to toggle source

Returns the level that this property is on. Top-level properties return 0, their children 1 and so on. This value is cached internally, so it does not have to be calculated each time the function is called.

# File lib/taskjuggler/PTNProxy.rb, line 85
def level
  return @level if @level >= 0

  t = self
  @level = 0
  until (t = t.parent).nil?
    @level += 1
  end
  @level
end
logicalId() click to toggle source

Return the logical ID of this node respesting adoptions. For PropertySet objects with a flat namespace, this is just the ID. Otherwise, the logical ID is composed of all IDs from the root node to this node, separating the IDs by a dot. In contrast to PropertyTreeNode::fullId() the logicalId takes the aption path into account.

# File lib/taskjuggler/PTNProxy.rb, line 39
def logicalId
  if @ptn.propertySet.flatNamespace
    @ptn.id
  else
    if (dotPos = @ptn.id.rindex('.'))
      id = @ptn.id[(dotPos + 1)..-1]
    else
      id = @ptn.id
    end
    @parent.logicalId + '.' + id
  end
end
method_missing(func, *args, &block) click to toggle source
# File lib/taskjuggler/PTNProxy.rb, line 118
def method_missing(func, *args, &block)
  @ptn.send(func, *args, &block)
end
respond_to?(method) click to toggle source
# File lib/taskjuggler/PTNProxy.rb, line 124
def respond_to?(method)
  respond_to_?(method) || @ptn.respond_to?(method)
end
Also aliased as: respond_to_?
respond_to_?(method)
Alias for: respond_to?
set(attribute, val) click to toggle source
# File lib/taskjuggler/PTNProxy.rb, line 52
def set(attribute, val)
  if attribute == 'index'
    @index = val
  elsif attribute == 'tree'
    @tree = val
  else
    @ptn.set(attribute, val)
  end
end