Search in sources :

Example 1 with CFRoute

use of org.springframework.ide.vscode.commons.cloudfoundry.client.CFRoute in project sts4 by spring-projects.

the class RouteValueParser method dynamicValidation.

private Object dynamicValidation(String str, Matcher matcher) throws Exception {
    if (domains == null) {
        // If domains is unknown we can't do the dynamic checks, so bail out.
        return str;
    }
    try {
        Collection<String> cloudDomains = Collections.emptyList();
        try {
            cloudDomains = domains.call();
        } catch (ValueParseException e) {
            /*
				 * If domains hint provider throws exception it is
				 * ValueParserException not NoTargetsException. This means no
				 * communication with CF -> abort dyncamic validation
				 */
            return matcher;
        }
        if (cloudDomains == null) {
            // If domains is unknown we can't do the dynamic checks, so bail out.
            return str;
        }
        CFRoute route = CFRoute.builder().from(str, cloudDomains).build();
        if (route.getDomain() == null || route.getDomain().isEmpty()) {
            throw new ValueParseException("Domain is missing.");
        }
        if ((route.getPath() != null && !route.getPath().isEmpty()) && (route.getPort() != CFRoute.NO_PORT)) {
            throw new ValueParseException("Unable to determine type of route. HTTP port may have a path but no port. TCP route may have port but no path.");
        }
        if (route.getPort() > MAX_PORT_NUMBER) {
            String portAndColumn = matcher.group(2);
            int start = str.indexOf(portAndColumn) + 1;
            int end = start + portAndColumn.length() - 1;
            throw new ValueParseException("Invalid port number. Port range must be between 1 and " + MAX_PORT_NUMBER, start, end);
        }
        if (!cloudDomains.contains(route.getDomain())) {
            String hostDomain = matcher.group(1);
            throw new ReconcileException("Unknown 'Domain'. Valid domains are: " + cloudDomains, ManifestYamlSchemaProblemsTypes.UNKNOWN_DOMAIN_PROBLEM, hostDomain.lastIndexOf(route.getDomain()), hostDomain.length());
        }
        return str;
    } catch (ConnectionException | NoTargetsException e) {
        // No connection to CF? Abort dynamic validation
        return str;
    }
}
Also used : NoTargetsException(org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.NoTargetsException) ReconcileException(org.springframework.ide.vscode.commons.languageserver.reconcile.ReconcileException) CFRoute(org.springframework.ide.vscode.commons.cloudfoundry.client.CFRoute) ValueParseException(org.springframework.ide.vscode.commons.util.ValueParseException) ConnectionException(org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.ConnectionException)

Aggregations

CFRoute (org.springframework.ide.vscode.commons.cloudfoundry.client.CFRoute)1 ConnectionException (org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.ConnectionException)1 NoTargetsException (org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.NoTargetsException)1 ReconcileException (org.springframework.ide.vscode.commons.languageserver.reconcile.ReconcileException)1 ValueParseException (org.springframework.ide.vscode.commons.util.ValueParseException)1