// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.sdk.internal.v8native.protocol.output;
import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import org.json.simple.JSONStreamAware;
import org.json.simple.JSONValue;
/**
* Represents a generic JSONStreamAware V8 request message (so that it can
* serialize itself into JSON.)
*/
public class DebuggerMessage implements JSONStreamAware {
private final int sequence;
private final String command;
private final Map<String, Object> arguments = new HashMap<String, Object>();
public DebuggerMessage(String command) {
this.sequence = SeqGenerator.getInstance().next();
this.command = command;
}
public Integer getSeq() {
return sequence;
}
public String getType() {
return V8MessageType.REQUEST.value;
}
public String getCommand() {
return command;
}
public Map<String, Object> getArguments() {
return arguments;
}
protected final void putArgument(String key, Object object) {
if (object != null) {
arguments.put(key, object);
}
}
protected final void putNullableArgument(String key, Object object) {
arguments.put(key, object);
}
private final void putArgumentString(String key, Object object) {
arguments.put(key, object.toString());
}
protected final void putArgumentStringIfNotNull(String key, Object object) {
if (object != null) {
putArgumentString(key, object);
}
}
public void writeJSONString(Writer out) throws IOException {
LinkedHashMap<String, Object> obj = new LinkedHashMap<String, Object>();
obj.put("seq", sequence);
obj.put("type", V8MessageType.REQUEST.value);
obj.put("command", command);
if (!arguments.isEmpty()) {
obj.put("arguments", arguments);
}
JSONValue.writeJSONString(obj, out);
}
}