Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2012 Daniel Bechler
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package de.danielbechler.diff;
 
 
 import java.util.*;

Used to find differences between Maps

Author(s):
Daniel Bechler
 
 final class MapDiffer implements Differ<MapNode>
 {
 	private final DifferDelegator delegator;
 	private final NodeInspector nodeInspector;
 
 	public MapDiffer(final DifferDelegator delegatorfinal NodeInspector nodeInspector)
 	{
 		Assert.notNull(delegator"delegator");
 		Assert.notNull(nodeInspector"nodeInspector");
 		this. = delegator;
 		this. = nodeInspector;
 	}
 
 	public final MapNode compare(final Node parentNodefinal Instances instances)
 	{
 		final MapNode mapNode = .createMapNode(parentNodeinstances);
 		indexAll(mapNodeinstances);
 		if (.isIgnored(mapNode))
 		{
 		}
 		else if (.isEqualsOnly(mapNode))
 		{
 			if (instances.areEqual())
 			{
 			}
 			else
 			{
 			}
 		}
 		else if (instances.hasBeenAdded())
 		{
 			compareEntries(mapNodeinstancesinstances.getWorking(Map.class).keySet());
 			mapNode.setState(..);
 		}
 		else if (instances.hasBeenRemoved())
 		{
 			compareEntries(mapNodeinstancesinstances.getBase(Map.class).keySet());
 		}
 		else if (instances.areSame())
 		{
 		}
 		else
 		{
 			compareEntries(mapNodeinstancesfindAddedKeys(instances));
 			compareEntries(mapNodeinstancesfindRemovedKeys(instances));
 			compareEntries(mapNodeinstancesfindKnownKeys(instances));
 		}
 		return mapNode;
 	}
 
 	private static void indexAll(final MapNode nodefinal Instances instances)
 	{
 		indexKeys(nodeinstances.getWorking(Map.class));
 		indexKeys(nodeinstances.getBase(Map.class));
 		indexKeys(nodeinstances.getFresh(Map.class));
 	}
 
 	private static void indexKeys(final MapNode mapNodefinal Map map)
 	{
 		if (map != null)
 		{
 			final Set<?> keys = map.keySet();
			for (final Object key : keys)
			{
				mapNode.indexKey(key);
			}
		}
	}
	private void compareEntries(final MapNode mapNodefinal Instances mapInstancesfinal Iterable<?> keys)
	{
		for (final Object key : keys)
		{
			final Node node = compareEntry(mapNodemapInstanceskey);
			{
				mapNode.addChild(node);
			}
		}
	}
	private Node compareEntry(final MapNode mapNodefinal Instances mapInstancesfinal Object key)
	{
		final Accessor mapEntryAccessor = mapNode.accessorForKey(key);
		final Instances mapEntryInstances = mapInstances.access(mapEntryAccessor);
		return .delegate(mapNodemapEntryInstances);
	}
	private static Collection<?> findAddedKeys(final Instances instances)
	{
		final Set<?> source = instances.getWorking(Map.class).keySet();
		final Set<?> filter = instances.getBase(Map.class).keySet();
		return Collections.filteredCopyOf(sourcefilter);
	}
	private static Collection<?> findRemovedKeys(final Instances instances)
	{
		final Set<?> source = instances.getBase(Map.class).keySet();
		final Set<?> filter = instances.getWorking(Map.class).keySet();
		return Collections.filteredCopyOf(sourcefilter);
	}
	private static Iterable<?> findKnownKeys(final Instances instances)
	{
		final Set<?> keys = instances.getWorking(Map.class).keySet();
		final Collection<?> changed = Collections.setOf(keys);
		changed.removeAll(findAddedKeys(instances));
		changed.removeAll(findRemovedKeys(instances));
		return changed;
	}
	public void setMapNodeFactory(final MapNodeFactory mapNodeFactory)
	{
		this. = mapNodeFactory;
	}
New to GrepCode? Check out our FAQ X