// 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); } }