protected void stripOptionPrefixes(Map<String, Object> optionsByName) { String transportName = getTransportName(); String protocolName = getProtocolName(); String transportFormat = format("%s.", transportName); List<String> prefixes; if (protocolName != null) { String transportAsProtocolFormat = format("%s[%s].", transportName, protocolName); prefixes = asList(transportFormat, transportAsProtocolFormat); } else { prefixes = Collections.singletonList(transportFormat); } // TODO: scheme-prefixed option names? // strip off current transport prefix for option names for (String prefix : prefixes) { Collection<String> prefixedOptionNames = new HashSet<>(); final Set<Map.Entry<String,Object>> entrySet = optionsByName.entrySet(); for (Map.Entry<String, Object> entry : entrySet) { String optionName = entry.getKey(); if (optionName.startsWith(prefix)) { prefixedOptionNames.add(optionName); } } int prefixLength = prefix.length(); for (String prefixedOptionName : prefixedOptionNames) { Object optionValue = optionsByName.remove(prefixedOptionName); String newOptionName = prefixedOptionName.substring(prefixLength); optionsByName.put(newOptionName, optionValue); } } }
String protocolName = getProtocolName(); if (optionsByName == Collections.<String,Object>emptyMap()) { optionsByName = new HashMap<>();
private void setOptions(T address, String location, ResourceOptions options, Object qualifier) { // default the transport ResourceAddress transport = options.getOption(TRANSPORT); String transportURI = options.getOption(TRANSPORT_URI); if (transport == null && addressFactory != null) { ResourceOptions newOptions = ResourceOptions.FACTORY.newResourceOptions(options); if (transportURI == null) { ResourceFactory factory = getTransportFactory(); if (factory != null) { transportURI = factory.createURI(location); newOptions.setOption(TRANSPORT_URI, transportURI); } } if (transportURI != null) { // TODO: make ResourceOptions hierarchical to provide options here? ResourceOptions transportOptions = ResourceOptions.FACTORY.newResourceOptions(); transportOptions.setOption(NEXT_PROTOCOL, getProtocolName()); URI locationURI = URI.create(location); transportOptions.setOption(TRANSPORTED_URI, locationURI); transport = addressFactory.newResourceAddress(transportURI, transportOptions); } newOptions.setOption(TRANSPORT, transport); options = newOptions; } setOptions(address, options, qualifier); }