author = "Bernardo Quaresma Dias (bernardo@tecgraf.puc-rio.br)",
description = [[
Converte configurao de planta de acordo com arquivo de Compatibilizao.
]],
getTokens = function( self, str, sep)
if str:sub(#str) ~= sep then
str = str .. sep
end
local toks = {}
for tok in str:gmatch( ("([^%s]*)%s"):format(sep, sep) ) do
toks[#toks+1] = tok
end
return toks
end,
getCompatInfo = function(self, fpath)
local compatinfo = {}
-- abre arquivo
-- para cada linha
for line in io.lines(fpath) do
-- se no for comentrio
if line:sub(1,1) ~= '#' then
local tokens = self:getTokens(line, ';')
-- importa duas primeiras colunas como fromclassid e fromattrid
local fromclassid = tokens[1]
local fromattrid = tokens[2]
-- importa duas ltimas colunas como toclassid e toattrid
local toclassid = tokens[3]
local toattrid = tokens[4]
local toattrinfos = compatinfo[fromclassid] or {} --[[ASSERT]] assert(toattrinfos[fromattrid] == nil, ("Atributo '%s' de classe '%s' j carregado para Compatibilizao"):format(tostring(fromattrid), tostring(fromclassid) ) )
for fromclassid, toattrinfos in pairs(COMPATINFO) do --[[DEBUG]] MPA.PrintOut(("Movendo atributos de classe '%s'..."):format(fromclassid) )
for frominstid in MPA.ConfigsIterator(fromclassid) do --[[DEBUG]] MPA.PrintOut(("Movendo atributos de instncia '%s'"):format(frominstid) )
local toclassids = {count = 0}
for fromattrid , toattrinfo in pairs(toattrinfos) do
local toclassid = toattrinfo.classid
local toclassid_count = toclassids[toclassid]
if not toclassid_count then
toclassid_count = toclassids.count + 1
toclassids[toclassid] = toclassid_count
toclassids.count = toclassid_count
end
local toattrid = toattrinfo.attrid --[[DEBUG]] MPA.PrintOut(("Movendo de '%s.%s' para '%s.%s'"):format(tostring(fromclassid), tostring(fromattrid), tostring(toclassid), tostring(toattrid)) )
local configid = config.id -- [[DEBUG]] MPA.PrintOut("reactsimAddConfig",classid, configid)
--Criar nova Configurao de Simulao Reativa
MPA.AddConfig(classid, configid)
-- [[DEBUG]]for k, v in pairs(config) do MPA.PrintOut(classid, configid, k,v) if (type(v) == "table") then for x,y in pairs(v) do MPA.PrintOut(classid, configid, k,v, x, y) end end end
for fieldid, fieldval in pairs(config) do -- [[DEBUG]] MPA.PrintOut("fieldid,fieldval", fieldid, fieldval)
if fieldid ~= "classid" and fieldid ~= "reactid" and fieldid ~= "id" then