// 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;
import org.chromium.sdk.internal.protocolparser.dynamicimpl.JavaCodeGenerator.MethodScope;
/**
* 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);
}
public void writeCheckJava(MethodScope methodScope, String valueRef, String hasValueRef,
String resultRef) {
conditionLogic.writeCheckJava(methodScope, valueRef, hasValueRef, resultRef, quickParser);
}
}