/*******************************************************************************
* Copyright (c) 2010 Robert "Unlogic" Olofsson (unlogic@unlogic.se).
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0-standalone.html
******************************************************************************/
package se.unlogic.standardutils.json;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
/**
* A JSON object component having children
*
* Equalizes the "composite" of the "composite pattern" design pattern.
*
* @author sikstromj
*
*/
public class JsonObject implements JsonNode {
/**
*
*/
private static final long serialVersionUID = -4958874287623042122L;
private final Map<String, JsonNode> fields = new HashMap<String, JsonNode>();
public String toJson() {
return this.toJson(new StringBuilder());
}
public String toJson(StringBuilder stringBuilder) {
stringBuilder.append("{");
Iterator<Entry<String, JsonNode>> iterator = fields.entrySet().iterator();
Entry<String, JsonNode> field;
while(iterator.hasNext()) {
field = iterator.next();
stringBuilder.append("\"");
stringBuilder.append(field.getKey());
stringBuilder.append("\"");
stringBuilder.append(":");
field.getValue().toJson(stringBuilder);
if(iterator.hasNext()) {
stringBuilder.append(",");
}
}
stringBuilder.append("}");
return stringBuilder.toString();
}
public void putField(String key, JsonNode value) {
this.fields.put(key, value);
}
public void putField(String key, String value) {
this.fields.put(key, new JsonLeaf(value));
}
public void removeField(String key) {
this.fields.remove(key);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((fields == null) ? 0 : fields.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
JsonObject other = (JsonObject) obj;
if (fields == null) {
if (other.fields != null)
return false;
} else if (!fields.equals(other.fields))
return false;
return true;
}
}