package com.bagri.core.server.api.df.map;
import java.io.File;
import java.io.InputStream;
import java.io.Reader;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.xml.xquery.XQItemType;
import com.bagri.core.api.BagriException;
import com.bagri.core.model.Data;
import com.bagri.core.model.NodeKind;
import com.bagri.core.model.Occurrence;
import com.bagri.core.server.api.ContentParser;
import com.bagri.core.server.api.ModelManagement;
import com.bagri.core.server.api.impl.ContentParserBase;
public class MapParser extends ContentParserBase implements ContentParser<Map<String, Object>> {
MapParser(ModelManagement model) {
super(model);
}
@Override
public void init(Properties properties) {
// think about possible props..
}
@Override
public List<Data> parse(Map<String, Object> source) throws BagriException {
ParserContext ctx = initContext();
ctx.addDocument("/map");
ctx.addData("map");
ctx.addElement();
// very simple map.
// implement nested maps, proper datatypes, arrays, etc..
for (Map.Entry<String, Object> e: source.entrySet()) {
ctx.addData("@" + e.getKey(), NodeKind.attribute, e.getValue(), XQItemType.XQBASETYPE_STRING, Occurrence.zeroOrOne);
}
ctx.endElement();
return ctx.getDataList();
}
@Override
public List<Data> parse(File file) throws BagriException {
// not used for Maps
return null;
}
@Override
public List<Data> parse(InputStream stream) throws BagriException {
// not used for Maps
return null;
}
@Override
public List<Data> parse(Reader reader) throws BagriException {
// not used for Maps
return null;
}
}