Search in sources :

Example 6 with RegisteredTemplate

use of com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate in project kylo by Teradata.

the class InMemoryFeedManagerTemplateService method saveRegisteredTemplate.

protected RegisteredTemplate saveRegisteredTemplate(RegisteredTemplate registeredTemplate) {
    // ensure that the incoming template name doesnt already exist.
    // if so remove and replace with this one
    RegisteredTemplate template = getRegisteredTemplateByName(registeredTemplate.getTemplateName());
    if (template != null && !template.getId().equalsIgnoreCase(registeredTemplate.getId())) {
        // remove the old one with the same name
        registeredTemplates.remove(template.getId());
        // update those feeds that were pointing to this old one, to this new one
        List<FeedMetadata> feedsToUpdate = feedProvider.getFeedsWithTemplate(registeredTemplate.getId());
        if (feedsToUpdate != null && !feedsToUpdate.isEmpty()) {
            for (FeedMetadata feedMetadata : feedsToUpdate) {
                feedMetadata.setTemplateId(template.getId());
            }
            // save the feeds
            FileObjectPersistence.getInstance().writeFeedsToFile(feedProvider.getFeeds());
        }
    }
    registeredTemplates.put(registeredTemplate.getId(), registeredTemplate);
    if (registeredTemplates.containsKey(registeredTemplate.getNifiTemplateId())) {
        registeredTemplates.remove(registeredTemplate.getNifiTemplateId());
    }
    FileObjectPersistence.getInstance().writeTemplatesToFile(registeredTemplates.values());
    return registeredTemplate;
}
Also used : FeedMetadata(com.thinkbiganalytics.feedmgr.rest.model.FeedMetadata) RegisteredTemplate(com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate)

Example 7 with RegisteredTemplate

use of com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate in project kylo by Teradata.

the class RegisteredTemplateService method findRegisteredTemplate.

/**
 * Gets a Registered Template or returns null if not found by various means passed in via the request object
 *
 * @param registeredTemplateRequest a request to get a registered template
 * @return the RegisteredTemplate or null if not found
 */
public RegisteredTemplate findRegisteredTemplate(RegisteredTemplateRequest registeredTemplateRequest) {
    String templateId = registeredTemplateRequest.getTemplateId();
    String templateName = registeredTemplateRequest.getTemplateName();
    // if we are looking for a given template as a request from a Feed, we need to query and access it via a service account.
    // otherwise we will access it as the user
    Principal[] principals = null;
    if (registeredTemplateRequest.isFeedEdit()) {
        principals = new Principal[1];
        principals[0] = MetadataAccess.SERVICE;
    } else {
        principals = new Principal[0];
    }
    // The default transformation type will not include sensitive property values.
    // if requested as a template or feed edit, it will include the encrypted sensitive property values
    TEMPLATE_TRANSFORMATION_TYPE transformationType = TEMPLATE_TRANSFORMATION_TYPE.WITH_FEED_NAMES;
    if (registeredTemplateRequest.isTemplateEdit() || registeredTemplateRequest.isFeedEdit() || registeredTemplateRequest.isIncludeSensitiveProperties()) {
        transformationType = TEMPLATE_TRANSFORMATION_TYPE.WITH_SENSITIVE_DATA;
    }
    RegisteredTemplate registeredTemplate = findRegisteredTemplateById(templateId, transformationType, principals);
    // if it is null check to see if the template exists in nifi and is already registered
    if (registeredTemplate == null) {
        // log.info("Attempt to get Template with id {}, returned null.  This id must be one registed in Nifi... attempt to query Nifi for this template ", templateId);
        registeredTemplate = findRegisteredTemplateByNiFiIdentifier(templateId, transformationType, principals);
    }
    if (registeredTemplate == null) {
        // attempt to look by name
        registeredTemplate = findRegisteredTemplateByName(templateName, transformationType, principals);
    }
    if (registeredTemplate != null) {
        if (registeredTemplateRequest.isIncludeAllProperties()) {
            registeredTemplate = mergeRegisteredTemplateProperties(registeredTemplate, registeredTemplateRequest);
            registeredTemplate.initializeProcessors();
            ensureRegisteredTemplateInputProcessors(registeredTemplate);
        }
        if (NifiPropertyUtil.containsPropertiesForProcessorMatchingType(registeredTemplate.getProperties(), NifiFeedConstants.TRIGGER_FEED_PROCESSOR_CLASS)) {
            registeredTemplate.setAllowPreconditions(true);
        } else {
            registeredTemplate.setAllowPreconditions(false);
        }
    }
    return registeredTemplate;
}
Also used : RegisteredTemplate(com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate) Principal(java.security.Principal) TEMPLATE_TRANSFORMATION_TYPE(com.thinkbiganalytics.feedmgr.service.template.TemplateModelTransform.TEMPLATE_TRANSFORMATION_TYPE)

Example 8 with RegisteredTemplate

use of com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate in project kylo by Teradata.

the class RegisteredTemplateService method saveRegisteredTemplate.

private RegisteredTemplate saveRegisteredTemplate(final RegisteredTemplate registeredTemplate, boolean reorder) {
    List<String> templateOrder = registeredTemplate.getTemplateOrder();
    registeredTemplate.setUpdated(false);
    RegisteredTemplate savedTemplate = metadataAccess.commit(() -> {
        this.accessController.checkPermission(AccessController.SERVICES, FeedServicesAccessControl.EDIT_TEMPLATES);
        return saveTemplate(registeredTemplate);
    });
    // order it
    if (reorder) {
        if (StringUtils.isBlank(registeredTemplate.getId())) {
            templateOrder = templateOrder.stream().map(template -> {
                if ("NEW".equals(template)) {
                    return savedTemplate.getId();
                } else {
                    return template;
                }
            }).collect(Collectors.toList());
        }
        orderTemplates(templateOrder, Sets.newHashSet(savedTemplate.getId()));
    }
    return savedTemplate;
}
Also used : RegisteredTemplate(com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate)

Example 9 with RegisteredTemplate

use of com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate 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;
}
Also used : TemplateDTO(org.apache.nifi.web.api.dto.TemplateDTO) NifiProperty(com.thinkbiganalytics.nifi.rest.model.NifiProperty) RegisteredTemplate(com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate)

Example 10 with RegisteredTemplate

use of com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate 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;
}
Also used : NiFiRemoteProcessGroup(com.thinkbiganalytics.nifi.rest.model.NiFiRemoteProcessGroup) TemplateDTO(org.apache.nifi.web.api.dto.TemplateDTO) ArrayList(java.util.ArrayList) NifiProperty(com.thinkbiganalytics.nifi.rest.model.NifiProperty) RegisteredTemplate(com.thinkbiganalytics.feedmgr.rest.model.RegisteredTemplate)

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