SaacContainer.java
package eu.javaexperience.saac.client;
import java.util.ArrayList;
import java.util.List;
import eu.javaexperience.collection.CollectionTools;
import eu.javaexperience.datareprez.DataCommon;
import eu.javaexperience.datareprez.DataObject;
import eu.javaexperience.datareprez.DataReprezDialectTools;
import eu.javaexperience.datareprez.DataReprezTools;
import eu.javaexperience.datareprez.convertFrom.DataWrapper;
import eu.javaexperience.interfaces.ObjectWithProperty;
import eu.javaexperience.interfaces.ObjectWithPropertyStorage;
public class SaacContainer implements ObjectWithProperty
{
protected String id;
protected String content;
protected List<SaacContainer> args = new ArrayList<>();
public static SaacContainer create(Class cls, String functionName, SaacContainer... args)
{
SaacContainer ret = new SaacContainer();
ret.id = cls.getCanonicalName()+"."+functionName;
ret.content = functionName;
CollectionTools.inlineAdd(ret.args, args);
return ret;
}
public static SaacContainer create(String str)
{
SaacContainer ret = new SaacContainer();
ret.id = "";
ret.content = str;
return ret;
}
public static SaacContainer create(Enum e)
{
return create(e.name());
}
public static SaacContainer create(Object str)
{
SaacContainer ret = new SaacContainer();
ret.id = "";
ret.content = str.toString();
return ret;
}
public static SaacContainer createArray()
{
SaacContainer ret = new SaacContainer();
ret.id = "";
ret.content = "";
return ret;
}
public SaacContainer addArgument(SaacContainer... args)
{
for(SaacContainer a:args)
{
this.args.add(a);
}
return this;
}
protected static final ObjectWithPropertyStorage<SaacContainer> PROPS = new ObjectWithPropertyStorage<>();
static
{
PROPS.addExaminer("id", (e)->e.id);
PROPS.addExaminer("content", (e)->e.content);
PROPS.addExaminer("args", (e)->e.args);
}
protected static final DataWrapper DATA_WRAPPER = DataReprezTools.combineWrappers
(
DataReprezTools.WRAP_ARRAY_COLLECTION_MAP,
DataReprezTools.WRAP_CLASS__OBJECT_WITH_PROPERTY
);
public DataObject serialize(DataCommon comm)
{
return (DataObject) DATA_WRAPPER.wrap(DATA_WRAPPER, comm, this);
}
@Override
public Object get(String key)
{
return PROPS.get(this, key);
}
@Override
public String[] keys()
{
return PROPS.keys();
}
public String getId()
{
return id;
}
public String getContent()
{
return content;
}
public List<SaacContainer> getContainers()
{
return args;
}
}