package org.constretto.model;
import org.apache.commons.lang.StringUtils;
import java.util.*;
/**
* @author <a href="mailto:kaare.nilsen@arktekk.no">Kaare Nilsen</a>
*/
public class CObject extends CValue {
private final Map<String, CValue> data;
public CObject(Map<String, CValue> data) {
if(data == null) {
throw new NullPointerException("The \"data\" argument can not be null");
}
this.data = data;
}
public Map<String, CValue> data() {
return data == null ? Collections.<String, CValue>emptyMap() : Collections.unmodifiableMap(data);
}
@Override
public Set<String> referencedKeys() {
Set<String> referencedKeys = new HashSet<String>();
for (CValue value : data.values()) {
referencedKeys.addAll(value.referencedKeys());
}
return referencedKeys;
}
@Override
public void replace(String key, String resolvedValue) {
for (CValue value : data.values()) {
value.replace(key, resolvedValue);
}
}
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder("{");
final int length = data.entrySet().size();
int elementsAdded = 0;
for (Map.Entry<String, CValue> entry : data.entrySet()) {
stringBuilder.append(entry.getKey());
stringBuilder.append(':');
stringBuilder.append(entry.getValue().toString());
elementsAdded++;
if(elementsAdded < length) {
stringBuilder.append(", ");
}
}
return stringBuilder.append("}").toString();
}
@Override
public boolean equals(final Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
final CObject cObject = (CObject) o;
if (data != null ? !data.equals(cObject.data) : cObject.data != null) return false;
return true;
}
@Override
public int hashCode() {
return data != null ? data.hashCode() : 0;
}
}