package com.thinkbiganalytics.nifi.rest.model;
/*-
* #%L
* thinkbig-nifi-rest-model
* %%
* Copyright (C) 2017 ThinkBig Analytics
* %%
* 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.
* #L%
*/
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.util.List;
import java.util.Map;
import javax.xml.bind.annotation.XmlRootElement;
/**
* Represents a NiFi property for a processor or controller service along with render options indicating how it should be rendered in the user interface
*/
@XmlRootElement
@JsonIgnoreProperties(ignoreUnknown = true)
public class NifiProperty {
/**
* Nifi property options from the Nifi dto
**/
private String processGroupName;
private String processorName;
private String processorId;
private String processGroupId;
private String processorType;
private String key;
private String value;
private List<String> expressionProperties;
private NiFiPropertyDescriptor propertyDescriptor;
/**
* copy of the value stored in the template, vs the on value stored here in the property to compare any changes
**/
private String templateValue;
/**
* flag indicating the admin chose to allow the user to configure this property when creating a feed
**/
private boolean userEditable;
/**
* how should the property be rendered
**/
private String renderType; // checkbox, input, editor-hive, editor-sql, editor-pig, etc
/**
* Additional options for rendering such as selectable values
**/
private Map<String, String> renderOptions;
/**
* flag indicating the property is selected for modification in the kylo ui
**/
private boolean selected;
/**
* flag indicating this property is part of a processor who is an 'input' or processor without any incoming connections
**/
private boolean inputProperty;
/**
* flag indicating the value of the template has ${config.} properties that need to be substituted
*/
private boolean containsConfigurationVariables;
/**
* flag to indicate the property is sensitive. Kylo will encrypt the sensitive properties before saving in the metadata.
*/
private boolean sensitive;
/**
* Flag to indicate the property is required.
*/
private boolean required;
/**
* a copy of the Template Property so it can be referenced back to when displaying data between the Feed and the template used
**/
private NifiProperty templateProperty;
public NifiProperty() {
}
public NifiProperty(NifiProperty property) {
this.processGroupName = property.getProcessGroupName();
this.processorName = property.getProcessorName();
this.processorId = property.getProcessorId();
this.processGroupId = property.getProcessGroupId();
this.key = property.getKey();
this.value = property.getValue();
this.templateValue = property.getTemplateValue();
this.userEditable = property.isUserEditable();
this.expressionProperties = property.getExpressionProperties();
this.propertyDescriptor = property.getPropertyDescriptor();
this.renderType = property.getRenderType();
this.selected = property.isSelected();
this.inputProperty = property.isInputProperty();
this.processorName = property.getProcessorType();
this.containsConfigurationVariables = property.isContainsConfigurationVariables();
this.sensitive = property.isSensitive();
this.required = property.isRequired();
}
public NifiProperty(String processGroupId, String processorId, String key, String value) {
this.processGroupId = processGroupId;
this.processorId = processorId;
this.key = key;
this.value = value;
}
public NifiProperty(String processGroupId, String processorId, String key, String value, NiFiPropertyDescriptor propertyDescriptor) {
this.processGroupId = processGroupId;
this.processorId = processorId;
this.key = key;
this.value = value;
this.propertyDescriptor = propertyDescriptor;
}
public String getProcessGroupName() {
return processGroupName;
}
public void setProcessGroupName(String processGroupName) {
this.processGroupName = processGroupName;
}
public String getProcessorName() {
return processorName;
}
public void setProcessorName(String processorName) {
this.processorName = processorName;
}
public String getProcessorId() {
return processorId;
}
public void setProcessorId(String processorId) {
this.processorId = processorId;
}
public String getProcessGroupId() {
return processGroupId;
}
public void setProcessGroupId(String processGroupId) {
this.processGroupId = processGroupId;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public NiFiPropertyDescriptor getPropertyDescriptor() {
return propertyDescriptor;
}
public void setPropertyDescriptor(NiFiPropertyDescriptor propertyDescriptor) {
this.propertyDescriptor = propertyDescriptor;
}
/**
* return a key string joining this properties processGroupId with the processorId and the property key
*
* @return a key string joining this properties processGroupId with the processorId and the property key
*/
public String getIdKey() {
return this.getProcessGroupId() + "-" + this.getProcessorId() + "-" + this.getKey();
}
public String getNameKey() {
return this.getProcessGroupName() + "-" + this.getProcessorName() + "-" + this.getKey();
}
public List<String> getExpressionProperties() {
return expressionProperties;
}
public String getProcessorNameTypeKey() {
return this.getProcessorName() + "-" + this.getProcessorType() + "-" + this.getKey();
}
public void setExpressionProperties(List<String> expressionProperties) {
this.expressionProperties = expressionProperties;
}
public String getTemplateValue() {
return templateValue;
}
public void setTemplateValue(String templateValue) {
this.templateValue = templateValue;
}
public boolean isUserEditable() {
return userEditable;
}
public void setUserEditable(boolean userEditable) {
this.userEditable = userEditable;
}
public boolean matchesIdKey(NifiProperty property) {
return this.getIdKey().equalsIgnoreCase(property.getIdKey());
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
public String getRenderType() {
return renderType;
}
public void setRenderType(String renderType) {
this.renderType = renderType;
}
public NifiProperty getTemplateProperty() {
return templateProperty;
}
public void setTemplateProperty(NifiProperty templateProperty) {
this.templateProperty = templateProperty;
}
public String getProcessorType() {
return processorType;
}
public void setProcessorType(String processorType) {
this.processorType = processorType;
}
public Map<String, String> getRenderOptions() {
return renderOptions;
}
public void setRenderOptions(Map<String, String> renderOptions) {
this.renderOptions = renderOptions;
}
public boolean isInputProperty() {
return inputProperty;
}
public void setInputProperty(boolean inputProperty) {
this.inputProperty = inputProperty;
}
public boolean isContainsConfigurationVariables() {
return containsConfigurationVariables;
}
public void setContainsConfigurationVariables(boolean containsConfigurationVariables) {
this.containsConfigurationVariables = containsConfigurationVariables;
}
@JsonIgnore
public void resetToTemplateValue(){
setValue(getTemplateValue());
}
public boolean isSensitive() {
return sensitive || (getPropertyDescriptor() != null && getPropertyDescriptor().isSensitive() != null && getPropertyDescriptor().isSensitive());
}
public void setSensitive(boolean sensitive) {
this.sensitive = sensitive;
}
public boolean isRequired() {
return required || (getPropertyDescriptor() != null && getPropertyDescriptor().isRequired() != null && getPropertyDescriptor().isRequired());
}
public void setRequired(boolean required) {
this.required = required;
}
}