All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vmware.connectors.airwatch.ConnConfiguration Maven / Gradle / Ivy

The newest version!
/*
 * Copyright © 2017 VMware, Inc. All Rights Reserved.
 * SPDX-License-Identifier: BSD-2-Clause
 */

package com.vmware.connectors.airwatch;

import com.vmware.connectors.airwatch.config.AppConfigurations;
import com.vmware.connectors.airwatch.exceptions.ConfigException;
import com.vmware.connectors.airwatch.service.AppConfigService;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.io.Resource;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.io.IOException;
import java.net.URI;
import java.nio.charset.Charset;
import java.util.Set;
import java.util.stream.Collectors;

import static org.springframework.web.util.UriComponentsBuilder.fromUriString;

/**
 * Created by harshas on 9/19/17.
 */
@Configuration
public class ConnConfiguration {

    private static final Logger logger = LoggerFactory.getLogger(ConnConfiguration.class);

    private final AppConfigurations appConfigurations;

    private final Resource metadataHalResource;

    private final Environment environment;

    @Autowired
    public ConnConfiguration(AppConfigurations appConfigurations,
                             Environment environment,
                             @Value("classpath:static/discovery/metadata.json") Resource metadataHalResource) {

        // Validate managed-apps.yml configurations.
        Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
        Set> violations = validator.validate(appConfigurations);
        violations
                .forEach(v -> logger.error("{} Check {} in managed-apps configuration.", v.getMessage(), v.getPropertyPath().toString()));
        if (!violations.isEmpty()) {
            throw new ConfigException("Invalid configurations for managed-apps.");
        }

        this.appConfigurations = appConfigurations;
        this.environment = environment;
        this.metadataHalResource = metadataHalResource;
    }

    @Bean
    public AppConfigService appConfigService() {
        return new AppConfigService(appConfigurations);
    }

    /*
     * Make a set of app keywords and build regex for the connector.
     * Replace regex place holder in the connector metadata file.
     */
    @Bean
    public String connectorMetadata() throws IOException {

        final String connectorRegex = "(?i)" + appConfigurations.getApps().stream()
                .flatMap(appConfiguration -> appConfiguration.getKeywords().stream())
                .collect(Collectors.joining("\\\\b|\\\\b", "\\\\b", "\\\\b"));

        String metaData = IOUtils.toString(metadataHalResource.getInputStream(), Charset.defaultCharset());
        return metaData.replace("CONNECTOR_REGEX", connectorRegex);
    }

    @Bean
    public URI gbBaseUrl() {
        try {
            return fromUriString(environment.getProperty("greenbox.url")).build().toUri();
        } catch (IllegalArgumentException ex) {
            logger.error("Greenbox URL config is invalid. ", ex);
            throw new ConfigException("Greenbox URL config is invalid.", ex);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy