/** * Checks whether there are any {@link RuntimeBeanReference RuntimeBeanReferences} * inside the {@link Map} and converts it to a {@link ManagedMap} if necessary. * @param map the original Map * @return either the original map or a managed copy of it */ private Object manageMapIfNecessary(Map<?, ?> map) { boolean containsRuntimeRefs = false; for (Object element : map.values()) { if (element instanceof RuntimeBeanReference) { containsRuntimeRefs = true; break; } } if (containsRuntimeRefs) { Map<Object, Object> managedMap = new ManagedMap<>(); managedMap.putAll(map); return managedMap; } return map; }
@Override @SuppressWarnings("unchecked") public Object merge(@Nullable Object parent) { if (!this.mergeEnabled) { throw new IllegalStateException("Not allowed to merge when the 'mergeEnabled' property is set to 'false'"); } if (parent == null) { return this; } if (!(parent instanceof Map)) { throw new IllegalArgumentException("Cannot merge with object of type [" + parent.getClass() + "]"); } Map<K, V> merged = new ManagedMap<>(); merged.putAll((Map<K, V>) parent); merged.putAll(this); return merged; }
@SuppressWarnings("unchecked") private static ManagedMap parseParameters(NodeList nodeList, RootBeanDefinition beanDefinition) { if (nodeList != null && nodeList.getLength() > 0) { ManagedMap parameters = null; for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); if (node instanceof Element) { if ("parameter".equals(node.getNodeName()) || "parameter".equals(node.getLocalName())) { if (parameters == null) { parameters = new ManagedMap(); } String key = ((Element) node).getAttribute("key"); String value = ((Element) node).getAttribute("value"); boolean hide = "true".equals(((Element) node).getAttribute("hide")); if (hide) { key = Constants.HIDE_KEY_PREFIX + key; } parameters.put(key, new TypedStringValue(value, String.class)); } } } return parameters; } return null; }
@SuppressWarnings("unchecked") private static ManagedMap parseParameters(NodeList nodeList, RootBeanDefinition beanDefinition) { if (nodeList != null && nodeList.getLength() > 0) { ManagedMap parameters = null; for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); if (node instanceof Element) { if ("parameter".equals(node.getNodeName()) || "parameter".equals(node.getLocalName())) { if (parameters == null) { parameters = new ManagedMap(); } String key = ((Element) node).getAttribute("key"); String value = ((Element) node).getAttribute("value"); boolean hide = "true".equals(((Element) node).getAttribute("hide")); if (hide) { key = Constants.HIDE_KEY_PREFIX + key; } parameters.put(key, new TypedStringValue(value, String.class)); } } } return parameters; } return null; }
private ManagedMap<String, Object> registerHandlerMapping( Element element, ParserContext context, @Nullable Object source) { RootBeanDefinition handlerMappingDef = new RootBeanDefinition(WebSocketHandlerMapping.class); String orderAttribute = element.getAttribute("order"); int order = orderAttribute.isEmpty() ? DEFAULT_MAPPING_ORDER : Integer.valueOf(orderAttribute); handlerMappingDef.getPropertyValues().add("order", order); String pathHelper = element.getAttribute("path-helper"); if (StringUtils.hasText(pathHelper)) { handlerMappingDef.getPropertyValues().add("urlPathHelper", new RuntimeBeanReference(pathHelper)); } ManagedMap<String, Object> urlMap = new ManagedMap<>(); urlMap.setSource(source); handlerMappingDef.getPropertyValues().add("urlMap", urlMap); registerBeanDef(handlerMappingDef, context, source); return urlMap; }
/** * Checks whether there are any runtime refs inside a Map and converts * it to a ManagedMap if necessary * * @param value The current map * @return A ManagedMap or a normal map */ private Object manageMapIfNecessary(Map<Object, Object> value) { boolean containsRuntimeRefs = false; for (Entry<Object, Object> e : value.entrySet()) { Object v = e.getValue(); if (v instanceof RuntimeBeanReference) { containsRuntimeRefs = true; } if (v instanceof BeanConfiguration) { BeanConfiguration c = (BeanConfiguration) v; e.setValue(c.getBeanDefinition()); containsRuntimeRefs = true; } } if(containsRuntimeRefs) { // return new ManagedMap(map); ManagedMap m = new ManagedMap(); m.putAll(value); return m; } return value; }
public void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { builder.addPropertyValue("delegate", parseListenerElement(element, parserContext, builder.getRawBeanDefinition())); ManagedMap<String, String> metaDataMap = new ManagedMap<>(); for (String metaDataPropertyName : getMethodNameAttributes()) { String listenerMethod = element.getAttribute(metaDataPropertyName); if (StringUtils.hasText(listenerMethod)) { metaDataMap.put(metaDataPropertyName, listenerMethod); } } builder.addPropertyValue("metaDataMap", metaDataMap); }
private Map<String, Properties> getProperties(String keyName, Properties properties) { ManagedMap<String, Properties> stepProperties = new ManagedMap<>(); stepProperties.setMergeEnabled(true); stepProperties.put(keyName, properties); return stepProperties; }
private RootBeanDefinition parseVersionResolver(ParserContext context, Element element, @Nullable Object source) { ManagedMap<String, Object> strategyMap = new ManagedMap<>(); strategyMap.setSource(source); RootBeanDefinition versionResolverDef = new RootBeanDefinition(VersionResourceResolver.class);
@Override @Nullable public BeanDefinition parse(Element element, ParserContext parserContext) { Object source = parserContext.extractSource(element); String defaultServletName = element.getAttribute("default-servlet-name"); RootBeanDefinition defaultServletHandlerDef = new RootBeanDefinition(DefaultServletHttpRequestHandler.class); defaultServletHandlerDef.setSource(source); defaultServletHandlerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); if (StringUtils.hasText(defaultServletName)) { defaultServletHandlerDef.getPropertyValues().add("defaultServletName", defaultServletName); } String defaultServletHandlerName = parserContext.getReaderContext().generateBeanName(defaultServletHandlerDef); parserContext.getRegistry().registerBeanDefinition(defaultServletHandlerName, defaultServletHandlerDef); parserContext.registerComponent(new BeanComponentDefinition(defaultServletHandlerDef, defaultServletHandlerName)); Map<String, String> urlMap = new ManagedMap<>(); urlMap.put("/**", defaultServletHandlerName); RootBeanDefinition handlerMappingDef = new RootBeanDefinition(SimpleUrlHandlerMapping.class); handlerMappingDef.setSource(source); handlerMappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); handlerMappingDef.getPropertyValues().add("urlMap", urlMap); String handlerMappingBeanName = parserContext.getReaderContext().generateBeanName(handlerMappingDef); parserContext.getRegistry().registerBeanDefinition(handlerMappingBeanName, handlerMappingDef); parserContext.registerComponent(new BeanComponentDefinition(handlerMappingDef, handlerMappingBeanName)); // Ensure BeanNameUrlHandlerMapping (SPR-8289) and default HandlerAdapters are not "turned off" MvcNamespaceUtils.registerDefaultComponents(parserContext, source); return null; }
private RootBeanDefinition parseAttributeSource(Element attrEle, ParserContext parserContext) { List<Element> methods = DomUtils.getChildElementsByTagName(attrEle, METHOD_ELEMENT); ManagedMap<TypedStringValue, RuleBasedTransactionAttribute> transactionAttributeMap = new ManagedMap<>(methods.size()); transactionAttributeMap.setSource(parserContext.extractSource(attrEle));
@Test(expected = IllegalStateException.class) public void mergeNotAllowedWhenMergeNotEnabled() { new ManagedMap().merge(null); }
urlMap = new ManagedMap<>(); hm.getPropertyValues().add("urlMap", urlMap);
@Test public void mergeEmptyChild() { ManagedMap parent = new ManagedMap(); parent.put("one", "one"); parent.put("two", "two"); ManagedMap child = new ManagedMap(); child.setMergeEnabled(true); Map mergedMap = (Map) child.merge(parent); assertEquals("merge() obviously did not work.", 2, mergedMap.size()); }
@Test public void mergeSunnyDay() { ManagedMap parent = new ManagedMap(); parent.put("one", "one"); parent.put("two", "two"); ManagedMap child = new ManagedMap(); child.put("three", "three"); child.setMergeEnabled(true); Map mergedMap = (Map) child.merge(parent); assertEquals("merge() obviously did not work.", 3, mergedMap.size()); }
@Test(expected = IllegalArgumentException.class) public void mergeWithNonCompatibleParentType() { ManagedMap map = new ManagedMap(); map.setMergeEnabled(true); map.merge("hello"); }
@Test public void mergeChildValuesOverrideTheParents() { ManagedMap parent = new ManagedMap(); parent.put("one", "one"); parent.put("two", "two"); ManagedMap child = new ManagedMap(); child.put("one", "fork"); child.setMergeEnabled(true); Map mergedMap = (Map) child.merge(parent); // child value for 'one' must override parent value... assertEquals("merge() obviously did not work.", 2, mergedMap.size()); assertEquals("Parent value not being overridden during merge().", "fork", mergedMap.get("one")); }
Map<String, String> urlMap = new ManagedMap<>(); String resourceRequestPath = element.getAttribute("mapping"); if (!StringUtils.hasText(resourceRequestPath)) {
ManagedMap<String, Object> urlMap = new ManagedMap<>(); urlMap.setSource(source); for (Element mappingElement : DomUtils.getChildElementsByTagName(element, "mapping")) {
@Test public void mergeWithNullParent() { ManagedMap child = new ManagedMap(); child.setMergeEnabled(true); assertSame(child, child.merge(null)); }