ModelData.java
package eu.javaexperience.webgsdb.commons;
import java.util.Map;
import eu.javaexperience.collection.map.MapTools;
import eu.javaexperience.collection.map.SmallMap;
import eu.javaexperience.datareprez.DataObject;
import eu.javaexperience.gsdbrpc.WebDbModel;
import eu.javaexperience.interfaces.ExternalDataAttached;
import eu.javaexperience.interfaces.ObjectWithProperty;
import eu.javaexperience.interfaces.ObjectWithPropertyStorage;
import eu.javaexperience.interfaces.simple.SimpleGetFactory;
import eu.javaexperience.text.StringTools;
public class ModelData implements ExternalDataAttached, ObjectWithProperty
{
public final Class<? extends WebDbModel> cls;
public ModelData(Class<? extends WebDbModel> cls)
{
this.cls = cls;
}
protected Map<String, Object> extraData;
@Override
public Map<String, Object> getExtraDataMap()
{
if(null == extraData)
{
extraData = new SmallMap<>();
}
return extraData;
}
public Map<String, FieldExtraAttributes> getFieldExtraAttributes()
{
return MapTools.ensureMapInMap(getExtraDataMap(), "field_extra_attributes", SimpleGetFactory.getSmallMapFactory());
}
@Override
public Object get(String key)
{
return PROPS.get(this, key);
}
@Override
public String[] keys()
{
return PROPS.keys();
}
protected static ObjectWithPropertyStorage<ModelData> PROPS = new ObjectWithPropertyStorage<>();
static
{
PROPS.addExaminer("cls", (e)-> (StringTools.toStringOrNull(e.cls)));
PROPS.addExaminer("extra", (e)-> e.extraData);
}
public static ModelData parse(DataObject obj)
{
if(null == obj)
{
return null;
}
ModelData ret = new ModelData(null);
DataObject extra = obj.optObject("extra");
ret.extraData = extra.asJavaMap();
return ret;
}
}