/** * Merges two container configurations together (recursively), adding values * from "parentValues" into "container" if "container" doesn't already * define them. * * @param parentValues The values that will be added if absent. * @param container The container to merge the values into. */ @SuppressWarnings("unchecked") private Map<String, Object> mergeObjects( Map<String, Object> parentValues, Map<String, Object> container) { // Clone the object with the parent values Map<String, Object> clone = Maps.newHashMap(parentValues); // Walk parameter list for the container and merge recursively. for (Map.Entry<String, Object> entry : container.entrySet()) { String field = entry.getKey(); Object fromParents = clone.get(field); Object fromContainer = entry.getValue(); // Merge if object type is Map if (fromContainer instanceof Map<?, ?> && fromParents instanceof Map<?, ?>) { clone.put(field, mergeObjects( (Map<String, Object>) fromParents, (Map<String, Object>) fromContainer)); } else { // Otherwise we just overwrite it. clone.put(field, fromContainer); } } return clone; }
/** * Merges two container configurations together (recursively), adding values * from "parentValues" into "container" if "container" doesn't already * define them. * * @param parentValues The values that will be added if absent. * @param container The container to merge the values into. */ @SuppressWarnings("unchecked") private Map<String, Object> mergeObjects( Map<String, Object> parentValues, Map<String, Object> container) { // Clone the object with the parent values Map<String, Object> clone = Maps.newHashMap(parentValues); // Walk parameter list for the container and merge recursively. for (Map.Entry<String, Object> entry : container.entrySet()) { String field = entry.getKey(); Object fromParents = clone.get(field); Object fromContainer = entry.getValue(); // Merge if object type is Map if (fromContainer instanceof Map<?, ?> && fromParents instanceof Map<?, ?>) { clone.put(field, mergeObjects( (Map<String, Object>) fromParents, (Map<String, Object>) fromContainer)); } else { // Otherwise we just overwrite it. clone.put(field, fromContainer); } } return clone; }
/** * Merges two container configurations together (recursively), adding values * from "parentValues" into "container" if "container" doesn't already * define them. * * @param parentValues The values that will be added if absent. * @param container The container to merge the values into. */ @SuppressWarnings("unchecked") private Map<String, Object> mergeObjects( Map<String, Object> parentValues, Map<String, Object> container) { // Clone the object with the parent values Map<String, Object> clone = Maps.newHashMap(parentValues); // Walk parameter list for the container and merge recursively. for (Map.Entry<String, Object> entry : container.entrySet()) { String field = entry.getKey(); Object fromParents = clone.get(field); Object fromContainer = entry.getValue(); // Merge if object type is Map if (fromContainer instanceof Map<?, ?> && fromParents instanceof Map<?, ?>) { clone.put(field, mergeObjects( (Map<String, Object>) fromParents, (Map<String, Object>) fromContainer)); } else { // Otherwise we just overwrite it. clone.put(field, fromContainer); } } return clone; }
"Unable to locate parent '" + parent + "' required by " + container.get(CONTAINER_KEY)); return mergeObjects(mergeParents(parent, config), container);
"Unable to locate parent '" + parent + "' required by " + container.get(CONTAINER_KEY)); return mergeObjects(mergeParents(parent, config), container);
"Unable to locate parent '" + parent + "' required by " + container.get(CONTAINER_KEY)); return mergeObjects(mergeParents(parent, config), container);