org.chromium.sdk/src/org/chromium/sdk/internal/protocolparser/dynamicimpl/JsonInvocationHandler.java
changeset 2 e4420d2515f1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.chromium.sdk/src/org/chromium/sdk/internal/protocolparser/dynamicimpl/JsonInvocationHandler.java	Wed Dec 23 17:13:18 2009 -0800
@@ -0,0 +1,35 @@
+// 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.protocolparser.dynamicimpl;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * The implementation of {@link InvocationHandler} for JSON types. It dispatches calls to method
+ * handlers from the map.
+ */
+class JsonInvocationHandler implements InvocationHandler {
+  private final ObjectData objectData;
+  private final Map<Method, MethodHandler> methodHandlerMap;
+
+  JsonInvocationHandler(ObjectData objectData, Map<Method, MethodHandler> methodHandlerMap) {
+    this.objectData = objectData;
+    this.methodHandlerMap = methodHandlerMap;
+  }
+
+  ObjectData getObjectData() {
+    return objectData;
+  }
+
+  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+    MethodHandler methodHandler = methodHandlerMap.get(method);
+    if (methodHandler == null) {
+      throw new RuntimeException("No method handler for " + method);
+    }
+    return methodHandler.handle(proxy, objectData, args);
+  }
+}