io.nosqlbench.engine.api.activityconfig.rawyaml.RawStmtsDoc Maven / Gradle / Ivy
/*
* Copyright (c) 2022 nosqlbench
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.nosqlbench.engine.api.activityconfig.rawyaml;
import io.nosqlbench.engine.api.util.AdaptersApiVersionInfo;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* A statements doc can have both a list of statement blocks and/or a
* list of statements. It can also have all the block parameters
* assignable to {@link RawStmtFields}.
*
* The reason for having support both statements or statement blocks
* is merely convenience. If you do not need or want to deal with the
* full blocks format, the extra structure gets in the way.
*/
public class RawStmtsDoc extends StatementsOwner {
private RawScenarios scenarios = new RawScenarios();
private final List blocks = new ArrayList<>();
private String versionRegex = ".+";
// no-args ctor is required
public RawStmtsDoc() {
}
public static RawStmtsDoc forSingleStatement(String statement) {
RawStmtsDoc rawStmtsDoc = new RawStmtsDoc();
rawStmtsDoc.setStatementsFieldByType(statement);
return rawStmtsDoc;
}
public void setFieldsByReflection(Map properties) {
if (properties.containsKey("version_regex")) {
String versionRegex = properties.remove("version_regex").toString();
new AdaptersApiVersionInfo().assertVersionPattern(versionRegex);
}
if (properties.containsKey("min_version")) {
String min_version = properties.remove("min_version").toString();
new AdaptersApiVersionInfo().assertNewer(min_version);
}
Object blocksObjects = properties.remove("blocks");
if (blocksObjects instanceof List) {
List