/* * Created by Andrey Cherkashin (acherkashin) * http://acherkashin.me * * License * Copyright (c) 2015 Andrey Cherkashin * The project released under the MIT license: http://opensource.org/licenses/MIT */ package ragefist.core.util; import com.juniform.JUniformObject; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.logging.Logger; import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; /** * * @author acherkashin */ public class FormatTools { // ---------------------------------------------------------------------- // // Lua => JUniformObject // ---------------------------------------------------------------------- // public static JUniformObject fromLuaToJUniformObject(LuaValue luaValue) { return new JUniformObject(_fromLuaToJUniformObject(luaValue)); } private static Object _fromLuaToJUniformObject(LuaValue luaValue) { if (luaValue.isboolean()) return luaValue.toboolean(); if (luaValue.islong()) return luaValue.tolong(); if (luaValue.isnil()) return null; if (luaValue.isstring()) return luaValue.tojstring(); if (luaValue.isnumber()) return luaValue.tonumber(); if (luaValue.istable()) { Map<Object,JUniformObject> map = new HashMap<>(); LuaTable table = (LuaTable)luaValue; for(LuaValue key : table.keys()) { LuaValue value = table.get(key); map.put(_fromLuaToJUniformObject(key), new JUniformObject(_fromLuaToJUniformObject(value))); } return map; } Logger.getLogger(FormatTools.class.getName()).warning("Failed to convert undefined type from Lua to JSON: " + luaValue.typename()); return null; } // ---------------------------------------------------------------------- // // JUniformObject => Lua // ---------------------------------------------------------------------- // public static LuaValue fromJUniformObjectToLuaValue(JUniformObject object) { return _fromJUniformObjectToLuaValue(object); } private static LuaValue _fromJUniformObjectToLuaValue(JUniformObject object) { Object innerObject = object.getValue(); if (innerObject == null) { return LuaValue.NIL; } if (innerObject instanceof Integer) { return LuaValue.valueOf((Integer)innerObject); } else if (innerObject instanceof Long) { return LuaValue.valueOf((int)Math.max(Math.min(Integer.MAX_VALUE, (Long)innerObject), Integer.MIN_VALUE)); } else if (innerObject instanceof String) { return LuaValue.valueOf((String)innerObject); } else if (innerObject instanceof Double) { return LuaValue.valueOf((Double)innerObject); } else if (innerObject instanceof Boolean) { return LuaValue.valueOf((Boolean)innerObject); } else if (object.isMapValue()) { LuaTable lua = new LuaTable(); Iterator<Map.Entry<Object,JUniformObject>> it = object.entrySet().iterator(); while(it.hasNext()) { Map.Entry<Object,JUniformObject> entry = it.next(); lua.set(_fromJUniformObjectToLuaValue(new JUniformObject(entry.getKey())), _fromJUniformObjectToLuaValue(entry.getValue())); } return lua; } else if (object.isArrayValue()) { LuaTable lua = new LuaTable(); int i = 1; Iterator<JUniformObject> it = object.iterator(); while(it.hasNext()) { lua.set(LuaValue.valueOf(i++), _fromJUniformObjectToLuaValue(it.next())); } return lua; } Logger.getLogger(FormatTools.class.getName()).warning("Failed to convert undefined type from Lua to JSON: " + object.getClass().getName()); return null; } }