/**
* Copyright (C) 2011 BonitaSoft S.A.
* BonitaSoft, 32 rue Gustave Eiffel - 38000 Grenoble
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2.0 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.bonitasoft.web.toolkit.client.common.json;
import org.bonitasoft.web.toolkit.client.common.AbstractTreeNode;
import org.bonitasoft.web.toolkit.client.common.Tree;
import org.bonitasoft.web.toolkit.client.common.TreeIndexed;
import org.bonitasoft.web.toolkit.client.common.TreeLeaf;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
/**
* @author Séverin Moussel
*
*/
public class JSonUnserializerClient extends JSonUtil implements JSonUnserializer {
private static JSonUnserializer INSTANCE = null;
public JSonUnserializerClient() {
INSTANCE = this;
}
public static AbstractTreeNode<String> unserializeTree(final String json) {
return INSTANCE._unserializeTree(json);
}
@Override
public AbstractTreeNode<String> _unserializeTree(final String json) {
return unserializeTreeNode(JSONParser.parseStrict(json));
}
private TreeIndexed<String> unserializeTreeNode(final JSONObject object) {
final TreeIndexed<String> result = new TreeIndexed<String>();
for (final String key : object.keySet()) {
result.addNode(key, unserializeTreeNode(object.get(key)));
}
return result;
}
private Tree<String> unserializeTreeNode(final JSONArray array) {
final Tree<String> result = new Tree<String>();
final int size = array.size();
for (int i = 0; i < size; i++) {
result.addNode(unserializeTreeNode(array.get(i)));
}
return result;
}
private AbstractTreeNode<String> unserializeTreeNode(final JSONValue value) {
if (value.isArray() != null) {
return unserializeTreeNode(value.isArray());
}
else if (value.isObject() != null) {
return unserializeTreeNode(value.isObject());
}
else if (value.isBoolean() != null) {
return new TreeLeaf<String>(value.isBoolean().booleanValue() ? "1" : "0");
}
else if (value.isNumber() != null) {
return new TreeLeaf<String>(value.isNumber().toString());
}
else if (value.isString() != null) {
return new TreeLeaf<String>(value.isString().stringValue());
}
return null;
}
}