use of com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate in project kylo by Teradata.
the class ValidateImportTemplatesArchive method validateTemplateProperties.
/**
* Validate the Template doesnt have any sensitive properties needing additional user input before importing
*
* @return true if valid, false if not
*/
private boolean validateTemplateProperties() {
RegisteredTemplate template = importTemplate.getTemplateToImport();
// detect any sensitive properties and prompt for input before proceeding
List<NifiProperty> sensitiveProperties = template.getSensitiveProperties();
ImportUtil.addToImportOptionsSensitiveProperties(importTemplateOptions, sensitiveProperties, ImportComponent.TEMPLATE_DATA);
boolean valid = ImportUtil.applyImportPropertiesToTemplate(template, importTemplate, ImportComponent.TEMPLATE_DATA);
if (!valid) {
importTemplate.getImportOptions().addErrorMessage(ImportComponent.TEMPLATE_DATA, "Additional properties are required for the Template");
}
this.importTemplateOptions.findImportComponentOption(ImportComponent.TEMPLATE_DATA).setAnalyzed(true);
return valid;
}
use of com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate in project kylo by Teradata.
the class ValidateImportTemplatesArchive method validateRegisteredTemplate.
/**
* Validate the Registered Template is valid for importing
*/
private void validateRegisteredTemplate() {
ImportComponentOption registeredTemplateOption = this.importTemplateOptions.findImportComponentOption(ImportComponent.TEMPLATE_DATA);
// validate template
boolean validForImport = true;
if (!registeredTemplateOption.isUserAcknowledged()) {
this.importTemplate.setValid(false);
this.importTemplate.getImportOptions().addErrorMessage(ImportComponent.TEMPLATE_DATA, "A template exists. Do you want to import it?");
}
if (registeredTemplateOption.isUserAcknowledged() && registeredTemplateOption.isShouldImport()) {
UploadProgressMessage statusMessage = uploadProgressService.addUploadStatus(this.importTemplateOptions.getUploadKey(), "Validating feed template for import");
RegisteredTemplate registeredTemplate = this.importTemplate.getTemplateToImport();
// validate unique
// 1 find if the template exists in the system running as a service account
RegisteredTemplate existingTemplate = registeredTemplateService.findRegisteredTemplate(new RegisteredTemplateRequest.Builder().templateName(registeredTemplate.getTemplateName()).isFeedEdit(true).build());
if (existingTemplate != null) {
if (this.importTemplateOptions.stopProcessingAlreadyExists(ImportComponent.TEMPLATE_DATA)) {
this.importTemplate.setValid(false);
String msg = "Unable to import the template " + registeredTemplate.getTemplateName() + " It is already registered.";
this.importTemplate.getImportOptions().addErrorMessage(ImportComponent.TEMPLATE_DATA, msg);
statusMessage.update("Validation error: The template " + registeredTemplate.getTemplateName() + " is already registered", false);
} else {
// skip importing if user doesnt want it.
if (!registeredTemplateOption.isOverwrite()) {
validForImport = false;
}
statusMessage.complete(true);
}
registeredTemplate.setId(existingTemplate.getId());
// validate entity access
if (accessController.isEntityAccessControlled() && registeredTemplateOption.isOverwrite()) {
// requery as the currently logged in user
statusMessage = uploadProgressService.addUploadStatus(this.importTemplateOptions.getUploadKey(), "Validating template entity access");
existingTemplate = registeredTemplateService.findRegisteredTemplate(RegisteredTemplateRequest.requestByTemplateName(registeredTemplate.getTemplateName()));
// ensure the user can Edit this template
boolean valid = existingTemplate != null && existingTemplate.getAllowedActions().hasAction(TemplateAccessControl.EDIT_TEMPLATE.getSystemName());
if (!valid) {
this.importTemplate.setValid(false);
validForImport = false;
statusMessage.update("Access Denied: You do not have edit access for the template " + registeredTemplate.getTemplateName(), false);
this.importTemplate.getImportOptions().addErrorMessage(ImportComponent.TEMPLATE_DATA, "Access Denied: You do not have edit access for the template ");
} else {
statusMessage.complete(valid);
}
}
} else {
// template doesnt exist.. it is new ensure the user is allowed to create templates
boolean editAccess = accessController.hasPermission(AccessController.SERVICES, FeedServicesAccessControl.EDIT_TEMPLATES);
if (!editAccess) {
statusMessage.update("Access Denied: You are not allowed to create the template " + registeredTemplate.getTemplateName(), false);
this.importTemplate.getImportOptions().addErrorMessage(ImportComponent.TEMPLATE_DATA, "Access Denied: You are not allowed to create the template ");
}
registeredTemplate.setId(null);
statusMessage.complete(editAccess);
}
validForImport &= !registeredTemplateOption.hasErrorMessages();
if (validForImport) {
boolean isValid = validateTemplateProperties();
if (this.importTemplate.isValid()) {
this.importTemplate.setValid(isValid);
}
validForImport &= isValid;
}
registeredTemplateOption.setValidForImport(validForImport);
}
this.uploadProgressService.completeSection(this.importTemplateOptions, ImportSection.Section.VALIDATE_REGISTERED_TEMPLATE);
}
use of com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate in project kylo by Teradata.
the class ImportUtil method applyImportPropertiesToTemplate.
public static boolean applyImportPropertiesToTemplate(RegisteredTemplate template, ImportTemplate importTemplate, ImportComponent component) {
ImportComponentOption option = importTemplate.getImportOptions().findImportComponentOption(component);
if (!option.getProperties().isEmpty() && option.getProperties().stream().anyMatch(importProperty -> StringUtils.isBlank(importProperty.getPropertyValue()))) {
importTemplate.setSuccess(false);
importTemplate.setTemplateResults(new NifiProcessGroup());
String msg = "Unable to import Template. Additional properties to be supplied before importing.";
importTemplate.getTemplateResults().addError(NifiError.SEVERITY.WARN, msg, "");
option.getErrorMessages().add(msg);
return false;
} else {
template.getSensitiveProperties().forEach(nifiProperty -> {
ImportProperty userSuppliedValue = option.getProperties().stream().filter(importFeedProperty -> nifiProperty.getProcessorId().equalsIgnoreCase(importFeedProperty.getProcessorId()) && nifiProperty.getKey().equalsIgnoreCase(importFeedProperty.getPropertyKey())).findFirst().orElse(null);
// deal with nulls?
if (userSuppliedValue == null) {
// attempt to find it via the name
userSuppliedValue = option.getProperties().stream().filter(importFeedProperty -> nifiProperty.getProcessorName().equalsIgnoreCase(importFeedProperty.getProcessorName()) && nifiProperty.getKey().equalsIgnoreCase(importFeedProperty.getPropertyKey())).findFirst().orElse(null);
}
if (userSuppliedValue != null) {
nifiProperty.setValue(userSuppliedValue.getPropertyValue());
}
});
return true;
}
}
use of com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate in project kylo by Teradata.
the class TemplatesRestController method getTemplates.
/**
* This will list all the templates registered in Kylo
*/
@GET
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation("Gets the list of all templates.")
@ApiResponses({ @ApiResponse(code = 200, message = "Returns the templates.", response = TemplateDtoWrapper.class, responseContainer = "Set"), @ApiResponse(code = 500, message = "NiFi is unavailable.", response = RestResponseStatus.class) })
public Response getTemplates(@QueryParam("includeDetails") boolean includeDetails) {
Set<TemplateDTO> nifiTemplates = nifiRestClient.getTemplates(includeDetails);
Set<TemplateDtoWrapper> dtos = new HashSet<>();
List<RegisteredTemplate> registeredTemplates = registeredTemplateService.getRegisteredTemplates();
for (final TemplateDTO dto : nifiTemplates) {
RegisteredTemplate match = registeredTemplates.stream().filter(template -> template.getNifiTemplateId().equalsIgnoreCase(dto.getId()) || template.getTemplateName().equalsIgnoreCase(dto.getName())).findFirst().orElse(null);
TemplateDtoWrapper wrapper = new TemplateDtoWrapper(dto);
if (match != null) {
wrapper.setRegisteredTemplateId(match.getId());
}
dtos.add(wrapper);
}
return Response.ok(dtos).build();
}
use of com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate in project kylo by Teradata.
the class TemplatesRestController method getRegisteredTemplate.
/**
* get a registeredTemplate
*/
@GET
@Path("/registered/{templateId}")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation("Gets the specified registered template.")
@ApiResponses({ @ApiResponse(code = 200, message = "Returns the template.", response = RegisteredTemplate.class), @ApiResponse(code = 500, message = "NiFi is unavailable.", response = RestResponseStatus.class) })
public Response getRegisteredTemplate(@PathParam("templateId") String templateId, @QueryParam("allProperties") boolean allProperties, @QueryParam("feedName") String feedName, @QueryParam("templateName") String templateName, @QueryParam("feedEdit") @DefaultValue("false") boolean feedEdit) {
RegisteredTemplateRequest registeredTemplateRequest = new RegisteredTemplateRequest.Builder().templateId(templateId).templateName(templateName).nifiTemplateId(templateId).includeAllProperties(allProperties).includePropertyDescriptors(true).isTemplateEdit(!feedEdit).isFeedEdit(feedEdit).build();
RegisteredTemplate registeredTemplate = null;
if (registeredTemplateRequest.isTemplateEdit()) {
registeredTemplate = registeredTemplateService.getRegisteredTemplateForUpdate(registeredTemplateRequest);
if (registeredTemplate != null && registeredTemplate.getNifiTemplate() != null && registeredTemplate.getNifiTemplate().getSnippet() != null) {
// ensure the template has processors
boolean valid = registeredTemplate.getNifiTemplate().getSnippet().getProcessors().size() > 0;
if (!valid) {
throw new WebApplicationException("In order to register the template you need to have one or more processors at the root level of the template.");
}
}
} else {
registeredTemplate = registeredTemplateService.findRegisteredTemplate(registeredTemplateRequest);
}
if (registeredTemplate == null) {
throw new WebApplicationException("Unable to find the template " + templateName != null ? templateName : templateId + ". The template either doesnt exist, or you do not have access to edit this template.");
}
return Response.ok(registeredTemplate).build();
}
Aggregations