/* Generated By:JJTree: Do not edit this line. OJson.java Version 4.3 */
/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=false,VISITOR=true,TRACK_TOKENS=true,NODE_PREFIX=O,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
package com.orientechnologies.orient.core.sql.parser;
import com.orientechnologies.orient.core.command.OCommandContext;
import com.orientechnologies.orient.core.db.record.OIdentifiable;
import com.orientechnologies.orient.core.record.impl.ODocument;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class OJson extends SimpleNode {
protected List<OJsonItem> items = new ArrayList<OJsonItem>();
public OJson(int id) {
super(id);
}
public OJson(OrientSql p, int id) {
super(p, id);
}
/**
* Accept the visitor. *
*/
public Object jjtAccept(OrientSqlVisitor visitor, Object data) {
return visitor.visit(this, data);
}
public void toString(Map<Object, Object> params, StringBuilder builder) {
builder.append("{");
boolean first = true;
for (OJsonItem item : items) {
if (!first) {
builder.append(", ");
}
item.toString(params, builder);
first = false;
}
builder.append("}");
}
public ODocument toDocument(OIdentifiable source, OCommandContext ctx) {
String className = getClassNameForDocument(ctx);
ODocument doc;
if (className != null) {
doc = new ODocument(className);
} else {
doc = new ODocument();
}
for (OJsonItem item : items) {
String name = item.getLeftValue();
if (name == null) {
continue;
}
Object value;
if (item.right.value instanceof OJson) {
value = ((OJson) item.right.value).toDocument(source, ctx);
} else {
value = item.right.execute(source, ctx);
}
doc.field(name, value);
}
return doc;
}
public Map<String, Object> toMap(OIdentifiable source, OCommandContext ctx) {
String className = getClassNameForDocument(ctx);
Map<String, Object> doc = new HashMap<String, Object>();
for (OJsonItem item : items) {
String name = item.getLeftValue();
if (name == null) {
continue;
}
Object value = item.right.execute(source, ctx);
doc.put(name, value);
}
return doc;
}
private String getClassNameForDocument(OCommandContext ctx) {
for (OJsonItem item : items) {
String left = item.getLeftValue();
if (left.toLowerCase().equals("@class")) {
return "" + item.right.execute(null, ctx);
}
}
return null;
}
}
/* JavaCC - OriginalChecksum=3beec9f6db486de944498588b51a505d (do not edit this line) */