Search in sources :

Example 16 with RegisteredTemplate

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;
}
Also used : NifiProperty(com.thinkbiganalytics.nifi.rest.model.NifiProperty) RegisteredTemplate(com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate)

Example 17 with RegisteredTemplate

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);
}
Also used : UploadProgressMessage(com.thinkbiganalytics.feedmgr.rest.model.UploadProgressMessage) ImportComponentOption(com.thinkbiganalytics.feedmgr.rest.model.ImportComponentOption) RegisteredTemplate(com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate)

Example 18 with RegisteredTemplate

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;
    }
}
Also used : FeedDataTransformation(com.thinkbiganalytics.feedmgr.rest.model.FeedDataTransformation) ZipInputStream(java.util.zip.ZipInputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) NifiError(com.thinkbiganalytics.nifi.rest.model.NifiError) ReusableTemplateConnectionInfo(com.thinkbiganalytics.feedmgr.rest.model.ReusableTemplateConnectionInfo) FeedMetadata(com.thinkbiganalytics.feedmgr.rest.model.FeedMetadata) StringUtils(org.apache.commons.lang3.StringUtils) ImportOptions(com.thinkbiganalytics.feedmgr.rest.model.ImportOptions) HashSet(java.util.HashSet) ObjectMapperSerializer(com.thinkbiganalytics.json.ObjectMapperSerializer) ByteArrayInputStream(java.io.ByteArrayInputStream) ImportProperty(com.thinkbiganalytics.feedmgr.rest.model.ImportProperty) Map(java.util.Map) TypeReference(com.fasterxml.jackson.core.type.TypeReference) ImportType(com.thinkbiganalytics.feedmgr.rest.ImportType) RegisteredTemplate(com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate) ZipEntry(java.util.zip.ZipEntry) Nonnull(javax.annotation.Nonnull) RemoteProcessGroupInputPort(com.thinkbiganalytics.feedmgr.rest.model.RemoteProcessGroupInputPort) ImportTemplate(com.thinkbiganalytics.feedmgr.service.template.importing.model.ImportTemplate) NifiProperty(com.thinkbiganalytics.nifi.rest.model.NifiProperty) FeedNameUtil(com.thinkbiganalytics.support.FeedNameUtil) StringWriter(java.io.StringWriter) Set(java.util.Set) IOException(java.io.IOException) Collectors(java.util.stream.Collectors) ZipFileUtil(com.thinkbiganalytics.feedmgr.support.ZipFileUtil) IOUtils(org.apache.commons.io.IOUtils) List(java.util.List) ImportFeed(com.thinkbiganalytics.feedmgr.service.feed.importing.model.ImportFeed) Optional(java.util.Optional) ImportComponent(com.thinkbiganalytics.feedmgr.rest.ImportComponent) ImportComponentOption(com.thinkbiganalytics.feedmgr.rest.model.ImportComponentOption) NifiProcessGroup(com.thinkbiganalytics.nifi.rest.model.NifiProcessGroup) InputStream(java.io.InputStream) ImportProperty(com.thinkbiganalytics.feedmgr.rest.model.ImportProperty) ImportComponentOption(com.thinkbiganalytics.feedmgr.rest.model.ImportComponentOption) NifiProcessGroup(com.thinkbiganalytics.nifi.rest.model.NifiProcessGroup)

Example 19 with RegisteredTemplate

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();
}
Also used : TemplateDTO(org.apache.nifi.web.api.dto.TemplateDTO) RegisteredTemplate(com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate) TemplateDtoWrapper(com.thinkbiganalytics.feedmgr.rest.model.TemplateDtoWrapper) HashSet(java.util.HashSet) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET) ApiOperation(io.swagger.annotations.ApiOperation) ApiResponses(io.swagger.annotations.ApiResponses)

Example 20 with RegisteredTemplate

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();
}
Also used : WebApplicationException(javax.ws.rs.WebApplicationException) RegisteredTemplate(com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate) RegisteredTemplateRequest(com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplateRequest) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET) ApiOperation(io.swagger.annotations.ApiOperation) ApiResponses(io.swagger.annotations.ApiResponses)

Aggregations

RegisteredTemplate (com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate)38 FeedManagerTemplate (com.thinkbiganalytics.metadata.api.template.FeedManagerTemplate)14 NifiProperty (com.thinkbiganalytics.nifi.rest.model.NifiProperty)12 ArrayList (java.util.ArrayList)12 FeedMetadata (com.thinkbiganalytics.feedmgr.rest.model.FeedMetadata)10 HashSet (java.util.HashSet)10 RegisteredTemplateRequest (com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplateRequest)9 List (java.util.List)9 Collectors (java.util.stream.Collectors)9 Inject (javax.inject.Inject)9 TemplateDTO (org.apache.nifi.web.api.dto.TemplateDTO)9 LegacyNifiRestClient (com.thinkbiganalytics.nifi.rest.client.LegacyNifiRestClient)8 AccessController (com.thinkbiganalytics.security.AccessController)8 StringUtils (org.apache.commons.lang3.StringUtils)8 ReusableTemplateConnectionInfo (com.thinkbiganalytics.feedmgr.rest.model.ReusableTemplateConnectionInfo)7 FeedServicesAccessControl (com.thinkbiganalytics.feedmgr.security.FeedServicesAccessControl)7 MetadataAccess (com.thinkbiganalytics.metadata.api.MetadataAccess)7 Collections (java.util.Collections)7 Map (java.util.Map)7 Set (java.util.Set)7