-------------------------------------------------------------------------------
-- Copyright (c) 2012 Sierra Wireless and others.
-- All rights reserved. This program and the accompanying materials
-- are made available under the terms of the Eclipse Public License v1.0
-- which accompanies this distribution, and is available at
-- http://www.eclipse.org/legal/epl-v10.html
--
-- Contributors:
--     Sierra Wireless - initial API and implementation
-------------------------------------------------------------------------------
local apimodel = require "models.apimodel"

---
-- @module testmodelutil
local M ={}

---
-- @function [parent=#testmodelutil] addfunctions
-- @param #table model without functions
-- @return #table model with functions
function M.addfunctions(model,visitednode)

  -- Avoid infinite self referenced table browsing
  local visitednode = visitednode or {}
  visitednode[model] = true

  -- add function for known table
  if model.tag and apimodel["_"..model.tag] and type(apimodel["_"..model.tag]) == 'function' then
    local emptymodel = apimodel["_"..model.tag]()
    for k,v in pairs(emptymodel) do
      if (type(v) == 'function') then
        model[k] = v
      end
    end
  end

  -- do it recursively
  for k, v in pairs( model ) do
    if type(v) == 'table' and not visitednode[v] then
      M.addfunctions(v, visitednode)
    end
  end
  return model
end


return M
