package com.nominanuda.zen.obj;
import com.nominanuda.zen.common.Check;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Iterator;
/**
* Created by azum on 17/03/17.
*/
public class Obj extends JSONObject implements Stru {
public static Obj make(Object...keysAndVals) {
Check.illegalargument.assertTrue(keysAndVals.length % 2 == 0, "odd number of arguments");
Obj o = new Obj();
if (keysAndVals != null) {
int halflen = keysAndVals.length / 2;
for (int i = 0; i < halflen; i++) {
try {
o.put((String) keysAndVals[i * 2], keysAndVals[i * 2 + 1]);
} catch (JSONException e) {
Check.illegalargument.fail();
}
}
}
return o;
}
public static Obj make(JSONObject json) {
try {
return new Obj(json);
} catch (JSONException e) {
Check.illegalargument.fail();
}
return null;
}
public static Obj make(String json) {
try {
return new Obj(json);
} catch (JSONException e) {
Check.illegalargument.fail();
}
return null;
}
public Obj() {
super();
}
public Obj(String json) throws JSONException {
super(json);
}
private Obj(JSONObject json) throws JSONException {
super(json, names(json));
}
@Override
public boolean isObj() {
return true;
}
@Override
public Obj asObj() throws ClassCastException {
return this;
}
@Override
public boolean isArr() {
return false;
}
@Override
public Arr asArr() throws ClassCastException {
throw new ClassCastException();
}
private static String[] names(JSONObject json) {
Iterator<String> i = json.keys();
ArrayList<String> n = new ArrayList<>();
while (i.hasNext()) {
n.add(i.next());
}
return n.toArray(new String[n.size()]);
}
}