blob: 00eb9c52bd5bc248da34cc6c29de9c961bdea96e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.nifi.minifi.commons.schema;
import org.apache.nifi.minifi.commons.schema.common.BaseSchemaWithIdAndName;
import org.apache.nifi.scheduling.SchedulingStrategy;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import static org.apache.nifi.minifi.commons.schema.common.CommonPropertyKeys.ANNOTATION_DATA_KEY;
import static org.apache.nifi.minifi.commons.schema.common.CommonPropertyKeys.CLASS_KEY;
import static org.apache.nifi.minifi.commons.schema.common.CommonPropertyKeys.DEFAULT_PROPERTIES;
import static org.apache.nifi.minifi.commons.schema.common.CommonPropertyKeys.MAX_CONCURRENT_TASKS_KEY;
import static org.apache.nifi.minifi.commons.schema.common.CommonPropertyKeys.PROPERTIES_KEY;
import static org.apache.nifi.minifi.commons.schema.common.CommonPropertyKeys.SCHEDULING_PERIOD_KEY;
import static org.apache.nifi.minifi.commons.schema.common.CommonPropertyKeys.SCHEDULING_STRATEGY_KEY;
import static org.apache.nifi.minifi.commons.schema.common.CommonPropertyKeys.YIELD_PERIOD_KEY;
public class ProcessorSchema extends BaseSchemaWithIdAndName {
public static final String PENALIZATION_PERIOD_KEY = "penalization period";
public static final String RUN_DURATION_NANOS_KEY = "run duration nanos";
public static final String AUTO_TERMINATED_RELATIONSHIPS_LIST_KEY = "auto-terminated relationships list";
public static final int DEFAULT_MAX_CONCURRENT_TASKS = 1;
public static final String DEFAULT_PENALIZATION_PERIOD = "30 sec";
public static final String DEFAULT_YIELD_DURATION = "1 sec";
public static final long DEFAULT_RUN_DURATION_NANOS = 0;
public static final List<String> DEFAULT_AUTO_TERMINATED_RELATIONSHIPS_LIST = Collections.emptyList();
public static final String IT_IS_NOT_A_VALID_SCHEDULING_STRATEGY = "it is not a valid scheduling strategy";
private String processorClass;
private String schedulingStrategy;
private String schedulingPeriod;
private Number maxConcurrentTasks = DEFAULT_MAX_CONCURRENT_TASKS;
private String penalizationPeriod = DEFAULT_PENALIZATION_PERIOD;
private String yieldPeriod = DEFAULT_YIELD_DURATION;
private Number runDurationNanos = DEFAULT_RUN_DURATION_NANOS;
private List<String> autoTerminatedRelationshipsList = DEFAULT_AUTO_TERMINATED_RELATIONSHIPS_LIST;
private Map<String, Object> properties = DEFAULT_PROPERTIES;
private String annotationData = "";
public ProcessorSchema(Map map) {
super(map, "Processor(id: {id}, name: {name})");
String wrapperName = getWrapperName();
processorClass = getRequiredKeyAsType(map, CLASS_KEY, String.class, wrapperName);
schedulingStrategy = getRequiredKeyAsType(map, SCHEDULING_STRATEGY_KEY, String.class, wrapperName);
if (schedulingStrategy != null && !isSchedulingStrategy(schedulingStrategy)) {
addValidationIssue(SCHEDULING_STRATEGY_KEY, wrapperName, IT_IS_NOT_A_VALID_SCHEDULING_STRATEGY);
}
schedulingPeriod = getRequiredKeyAsType(map, SCHEDULING_PERIOD_KEY, String.class, wrapperName);
maxConcurrentTasks = getOptionalKeyAsType(map, MAX_CONCURRENT_TASKS_KEY, Number.class, wrapperName, DEFAULT_MAX_CONCURRENT_TASKS);
penalizationPeriod = getOptionalKeyAsType(map, PENALIZATION_PERIOD_KEY, String.class, wrapperName, DEFAULT_PENALIZATION_PERIOD);
yieldPeriod = getOptionalKeyAsType(map, YIELD_PERIOD_KEY, String.class, wrapperName, DEFAULT_YIELD_DURATION);
runDurationNanos = getOptionalKeyAsType(map, RUN_DURATION_NANOS_KEY, Number.class, wrapperName, DEFAULT_RUN_DURATION_NANOS);
autoTerminatedRelationshipsList = getOptionalKeyAsType(map, AUTO_TERMINATED_RELATIONSHIPS_LIST_KEY, List.class, wrapperName, DEFAULT_AUTO_TERMINATED_RELATIONSHIPS_LIST);
properties = getOptionalKeyAsType(map, PROPERTIES_KEY, Map.class, wrapperName, DEFAULT_PROPERTIES);
annotationData = getOptionalKeyAsType(map, ANNOTATION_DATA_KEY, String.class, wrapperName, "");
}
public static boolean isSchedulingStrategy(String string) {
try {
SchedulingStrategy.valueOf(string);
} catch (Exception e) {
return false;
}
return true;
}
@Override
public Map<String, Object> toMap() {
Map<String, Object> result = super.toMap();
result.put(CLASS_KEY, processorClass);
result.put(MAX_CONCURRENT_TASKS_KEY, maxConcurrentTasks);
result.put(SCHEDULING_STRATEGY_KEY, schedulingStrategy);
result.put(SCHEDULING_PERIOD_KEY, schedulingPeriod);
result.put(PENALIZATION_PERIOD_KEY, penalizationPeriod);
result.put(YIELD_PERIOD_KEY, yieldPeriod);
result.put(RUN_DURATION_NANOS_KEY, runDurationNanos);
result.put(AUTO_TERMINATED_RELATIONSHIPS_LIST_KEY, autoTerminatedRelationshipsList);
result.put(PROPERTIES_KEY, new TreeMap<>(properties));
if(annotationData != null && !annotationData.isEmpty()) {
result.put(ANNOTATION_DATA_KEY, annotationData);
}
return result;
}
public String getProcessorClass() {
return processorClass;
}
public Number getMaxConcurrentTasks() {
return maxConcurrentTasks;
}
public String getSchedulingStrategy() {
return schedulingStrategy;
}
public String getSchedulingPeriod() {
return schedulingPeriod;
}
public String getPenalizationPeriod() {
return penalizationPeriod;
}
public String getYieldPeriod() {
return yieldPeriod;
}
public Number getRunDurationNanos() {
return runDurationNanos;
}
public List<String> getAutoTerminatedRelationshipsList() {
return autoTerminatedRelationshipsList;
}
public Map<String, Object> getProperties() {
return properties;
}
public String getAnnotationData() {
return annotationData;
}
}