/** * Iterate through registered additional node types to find type which = prefix of dns, and then * return NodeConfig(found_type, dns). For example: given: dns = "builder2.dev.com" * $builder_host_name = "builder1.dev.com" => base_node_domain = ".dev.com" Result = new * NodeConfig(BUILDER, "builder2.dev.com") * * <p>Example 2: given: dns = "builder2.dev.com" $builder_host_name = "builder1.example.com" => * base_node_domain = ".example.com" != ".dev.com" Result = IllegalArgumentException("Illegal DNS * name 'builder2.dev.com' of additional node....) * * @throws IllegalArgumentException if dns doesn't comply with convention * '<supported_node_type><number>(base_node_domain)' where supported prefix */ public NodeConfig recognizeNodeConfigFromDns(String dns) throws IllegalArgumentException, IllegalStateException { for (Map.Entry<NodeConfig.NodeType, String> entry : ADDITIONAL_NODES_CODENVY_PROPERTIES.entrySet()) { NodeConfig.NodeType type = entry.getKey(); NodeConfig baseNode = NodeConfig.extractConfigFrom(config, type); if (baseNode == null) { throw new IllegalStateException( format("Host name of base node of type '%s' wasn't found.", type)); } String typeString = type.toString().toLowerCase(); String baseNodeDomain = ConfigManager.getBaseNodeDomain(baseNode).toLowerCase(); String regex = format("^%s\\d+%s$", typeString, baseNodeDomain); if (dns != null && dns.toLowerCase().matches(regex)) { return new NodeConfig(type, dns, null); } } throw new IllegalArgumentException( format( "Illegal DNS name '%s' of additional node. " + "Correct name template is '<prefix><number><base_node_domain>' where supported prefix is one from" + " the list '%s'", dns, ADDITIONAL_NODES_CODENVY_PROPERTIES.keySet().toString().toLowerCase())); }