org.chromium.sdk/src/org/chromium/sdk/internal/protocolparser/dynamicimpl/FieldCondition.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/FieldCondition.java	Wed Dec 23 17:13:18 2009 -0800
@@ -0,0 +1,41 @@
+// 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 org.chromium.sdk.internal.protocolparser.JsonProtocolModelParseException;
+import org.chromium.sdk.internal.protocolparser.JsonProtocolParseException;
+
+/**
+ * An implementation of JsonSubtypeCondition* annotations. Basically it only holds all parameters
+ * and delegates actual condition evaluating to {@link #conditionLogic}.
+ */
+class FieldCondition {
+  private final String propertyName;
+  private final QuickParser<?> quickParser;
+  private final FieldConditionLogic conditionLogic;
+
+  FieldCondition(String propertyName, QuickParser<?> quickParser,
+      FieldConditionLogic conditionLogic) throws JsonProtocolModelParseException {
+    if (conditionLogic.requiresQuickParser() && quickParser == null) {
+      throw new JsonProtocolModelParseException(
+          "The choose condition does not work with the type of " + propertyName);
+    }
+    this.propertyName = propertyName;
+    this.quickParser = quickParser;
+    this.conditionLogic = conditionLogic;
+  }
+
+  String getPropertyName() {
+    return propertyName;
+  }
+
+  /**
+   * @param hasValue whether field exists in JSON object (however its value may be null)
+   * @param unparsedValue value of the field if hasValue is true or undefined otherwise
+   */
+  boolean checkValue(boolean hasValue, Object unparsedValue) throws JsonProtocolParseException {
+    return conditionLogic.checkValue(hasValue, unparsedValue, quickParser);
+  }
+}
\ No newline at end of file