/*************************************************************************
* Copyright 2013-2014 Eucalyptus Systems, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*
* Please contact Eucalyptus Systems, Inc., 6755 Hollister Ave., Goleta
* CA 93117, USA or visit http://www.eucalyptus.com/licenses/ if you need
* additional information or have any questions.
************************************************************************/
package com.eucalyptus.cloudformation.template;
import com.eucalyptus.cloudformation.CloudFormationException;
import com.fasterxml.jackson.databind.JsonNode;
public interface IntrinsicFunction {
MatchResult evaluateMatch(JsonNode jsonNode);
ValidateResult validateArgTypesWherePossible(MatchResult matchResult) throws CloudFormationException;
JsonNode evaluateFunction(ValidateResult validateResult, Template template, String effectiveUserId) throws CloudFormationException;
public static class MatchResult {
boolean match;
JsonNode jsonNode;
IntrinsicFunction callingFunction;
public boolean isMatch() {
return match;
}
public JsonNode getJsonNode() {
return jsonNode;
}
public IntrinsicFunction getCallingFunction() {
return callingFunction;
}
public MatchResult(boolean match, JsonNode jsonNode, IntrinsicFunction callingFunction) {
this.match = match;
this.jsonNode = jsonNode;
this.callingFunction = callingFunction;
}
}
public static class ValidateResult {
JsonNode jsonNode;
IntrinsicFunction callingFunction;
public JsonNode getJsonNode() {
return jsonNode;
}
public IntrinsicFunction getCallingFunction() {
return callingFunction;
}
public ValidateResult(JsonNode jsonNode, IntrinsicFunction callingFunction) {
this.jsonNode = jsonNode;
this.callingFunction = callingFunction;
}
}
}