use of org.apache.nifi.web.api.dto.TemplateDTO in project kylo by Teradata.
the class RegisteredTemplateService method mergeRegisteredTemplateProperties.
/**
* Merge all saved properties on the RegisteredTemplate along with the properties in the NiFi template
* The resulting object will have the {@link RegisteredTemplate#properties} updated so they are in sync with NiFi.
*
* @return a RegisteredTemplate that has the properties updated with those in NiFi
*/
public RegisteredTemplate mergeRegisteredTemplateProperties(RegisteredTemplate registeredTemplate, RegisteredTemplateRequest registeredTemplateRequest) {
if (registeredTemplate != null) {
log.info("Merging properties for template {} ({})", registeredTemplate.getTemplateName(), registeredTemplate.getId());
List<NifiProperty> properties = null;
int matchCount = 0;
// get the nifi template associated with this one that is registered
TemplateDTO templateDTO = registeredTemplate.getNifiTemplate();
if (templateDTO == null) {
templateDTO = ensureNifiTemplate(registeredTemplate);
}
if (templateDTO != null) {
registeredTemplate.setNifiTemplate(templateDTO);
properties = niFiTemplateCache.getTemplateProperties(templateDTO, registeredTemplateRequest.isIncludePropertyDescriptors(), registeredTemplate);
// first attempt to match the properties by the processorid and processor name
// NifiPropertyUtil
// .matchAndSetPropertyByIdKey(properties, registeredTemplate.getProperties(), NifiPropertyUtil.PROPERTY_MATCH_AND_UPDATE_MODE.UPDATE_ALL_PROPERTIES);
}
/* if (properties != null) {
//match the properties to the processors by the processor name
NifiPropertyUtil.matchAndSetPropertyByProcessorName(properties, registeredTemplate.getProperties(),
NifiPropertyUtil.PROPERTY_MATCH_AND_UPDATE_MODE.UPDATE_ALL_PROPERTIES);
}
*/
if (templateDTO != null && !templateDTO.getId().equalsIgnoreCase(registeredTemplate.getNifiTemplateId())) {
syncNiFiTemplateId(registeredTemplate);
}
if (properties == null) {
properties = new ArrayList<>();
}
// merge with the registered properties
RegisteredTemplate copy = new RegisteredTemplate(registeredTemplate);
copy.setProperties(properties);
copy.setNifiTemplate(registeredTemplate.getNifiTemplate());
registeredTemplate = copy;
} else {
log.info("Unable to merge Registered Template. It is null");
}
return registeredTemplate;
}
use of org.apache.nifi.web.api.dto.TemplateDTO in project kylo by Teradata.
the class RegisteredTemplateService method nifiTemplateToRegisteredTemplate.
/**
* this will return a RegisteredTemplate object for a given NiFi template Id.
* This is to be used for new templates that are going to be registered with Kylo.
* Callers of this method should ensure that a template of this id is not already registered
*
* @param nifiTemplateId the nifi template identifier
* @return a RegisteredTemplate object of null if not found in NiFi
*/
private RegisteredTemplate nifiTemplateToRegisteredTemplate(String nifiTemplateId) {
RegisteredTemplate registeredTemplate = null;
List<NifiProperty> properties = new ArrayList<>();
TemplateDTO nifiTemplate = nifiRestClient.getTemplateById(nifiTemplateId);
if (nifiTemplate != null) {
registeredTemplate = new RegisteredTemplate();
registeredTemplate.setNifiTemplateId(nifiTemplateId);
properties = niFiTemplateCache.getTemplateProperties(nifiTemplate, true, null);
// TODO not sure if this is needed
List<NiFiRemoteProcessGroup> remoteProcessGroups = niFiTemplateCache.getRemoteProcessGroups(nifiTemplate);
registeredTemplate.setRemoteProcessGroups(remoteProcessGroups);
registeredTemplate.setNifiTemplate(nifiTemplate);
registeredTemplate.setTemplateName(nifiTemplate.getName());
registeredTemplate.setProperties(properties);
}
return registeredTemplate;
}
use of org.apache.nifi.web.api.dto.TemplateDTO in project kylo by Teradata.
the class RegisteredTemplateService method nifiTemplateIdForTemplateName.
/**
* Return the NiFi template id for the incoming template name
*
* @param templateName the name of the template
* @return the NiFi template id for the incoming template name, null if not found
*/
public String nifiTemplateIdForTemplateName(String templateName) {
TemplateDTO templateDTO = null;
templateDTO = nifiRestClient.getTemplateByName(templateName);
if (templateDTO != null) {
return templateDTO.getId();
}
return null;
}
use of org.apache.nifi.web.api.dto.TemplateDTO in project kylo by Teradata.
the class AbstractImportTemplateRoutine method importIntoNiFi.
/**
* Import a template string into NiFi as a template to use
*/
public NiFiTemplateImport importIntoNiFi(ImportTemplate template, ImportTemplateOptions importOptions) throws ImportException {
TemplateDTO dto = null;
String templateName = null;
String oldTemplateXml = null;
ImportComponentOption nifiTemplateImport = importOptions.findImportComponentOption(ImportComponent.NIFI_TEMPLATE);
if (nifiTemplateImport.isValidForImport()) {
try {
templateName = NifiTemplateParser.getTemplateName(template.getNifiTemplateXml());
template.setTemplateName(templateName);
dto = nifiRestClient.getTemplateByName(templateName);
if (dto != null) {
oldTemplateXml = nifiRestClient.getTemplateXml(dto.getId());
template.setNifiTemplateId(dto.getId());
if (importOptions.isImportAndOverwrite(ImportComponent.NIFI_TEMPLATE) && nifiTemplateImport.isValidForImport()) {
nifiRestClient.deleteTemplate(dto.getId());
} else if (!template.isZipFile()) {
// if its not a zip file we need to error out if the user has decided not to overwrite when it already exists
uploadProgressService.addUploadStatus(importOptions.getUploadKey(), "The template " + templateName + " already exists in NiFi. Please choose the option to replace the template and try again.", true, false);
template.setValid(false);
}
}
} catch (ParserConfigurationException | XPathExpressionException | IOException | SAXException e) {
throw new ImportException("The xml file you are trying to import is not a valid NiFi template. Please try again. " + e.getMessage());
}
boolean register = (dto == null || (importOptions.isImportAndOverwrite(ImportComponent.NIFI_TEMPLATE) && nifiTemplateImport.isValidForImport()));
// attempt to import the xml into NiFi if its new, or if the user said to overwrite
if (register) {
UploadProgressMessage statusMessage = uploadProgressService.addUploadStatus(importOptions.getUploadKey(), "Importing " + templateName + " into NiFi");
log.info("Attempting to import Nifi Template: {} for file {}", templateName, template.getFileName());
dto = nifiRestClient.importTemplate(template.getTemplateName(), template.getNifiTemplateXml());
template.setNifiTemplateId(dto.getId());
statusMessage.update("Imported " + templateName + " into NiFi", true);
}
}
uploadProgressService.completeSection(importOptions, ImportSection.Section.IMPORT_NIFI_TEMPLATE);
return new NiFiTemplateImport(oldTemplateXml, dto);
}
use of org.apache.nifi.web.api.dto.TemplateDTO in project kylo by Teradata.
the class ImportReusableTemplate method create.
@Override
public NifiProcessGroup create(NiFiTemplateImport niFiTemplateImport, UploadProgressMessage importStatusMessage) {
TemplateDTO dto = niFiTemplateImport.getDto();
String templateName = importTemplate.getTemplateName();
String fileName = importTemplate.getFileName();
importStatusMessage.update("Creating reusable flow instance for " + templateName);
log.info("Creating a Reusable flow template instance in Nifi. Template: {} for file {}", templateName, fileName);
Map<String, Object> configProperties = propertyExpressionResolver.getStaticConfigProperties();
NifiFlowCacheReusableTemplateCreationCallback reusableTemplateCreationCallback = new NifiFlowCacheReusableTemplateCreationCallback();
List<NifiProperty> templateProperties = importTemplate.getTemplateToImport() != null ? importTemplate.getTemplateToImport().getProperties() : Collections.emptyList();
NifiProcessGroup newTemplateInstance = nifiRestClient.createNewTemplateInstance(dto.getId(), templateProperties, configProperties, true, reusableTemplateCreationCallback, importTemplate.getVersionIdentifier());
if (newTemplateInstance.getVersionedProcessGroup() != null && StringUtils.isNotBlank(newTemplateInstance.getVersionedProcessGroup().getVersionedProcessGroupName())) {
uploadProgressService.addUploadStatus(importTemplateOptions.getUploadKey(), "Versioned off previous flow with the name: " + newTemplateInstance.getVersionedProcessGroup().getVersionedProcessGroupName(), true, true);
}
importTemplate.setTemplateResults(newTemplateInstance);
return newTemplateInstance;
}
Aggregations