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 Collections.

Author(s):
Daniel Bechler
 
 {
 	public CollectionDiffer()
 	{
 		setDelegate(new DelegatingObjectDifferImpl(nullnullthisnull));
 	}
 
 	public CollectionDiffer(final DelegatingObjectDiffer delegate)
 	{
 		super(delegate);
 	}
 
 	public CollectionNode compare(final Collection<?> workingfinal Collection<?> base)
 	{
 		return compare(., Instances.of(new RootAccessor(), workingbase));
 	}
 
 	protected CollectionNode internalCompare(final Node parentNodefinal Instances instances)
 	{
 		final CollectionNode node = newNode(parentNodeinstances);
 		if (getDelegate().isIgnored(node))
 		{
 		}
 		else if (instances.getWorking() != null && instances.getBase() == null)
 		{
 			handleItems(nodeinstancesinstances.getWorking(Collection.class));
 		}
 		else if (instances.getWorking() == null && instances.getBase() != null)
 		{
 			handleItems(nodeinstancesinstances.getBase(Collection.class));
 		}
 		else if (instances.areSame())
 		{
 		}
 		else
 		{
 			handleItems(nodeinstancesfindAddedItems(instances));
 			handleItems(nodeinstancesfindRemovedItems(instances));
 			handleItems(nodeinstancesfindKnownItems(instances));
 		}
 		return node;
 	}
 
 	protected CollectionNode newNode(final Node parentNodefinal Instances instances)
 	{
 		return new CollectionNode(parentNodeinstances.getSourceAccessor(), instances.getType());
 	}
 
 	private void handleItems(final CollectionNode collectionNode,
 							 final Instances instances,
 							 final Iterable<?> items)
 	{
 		for (final Object item : items)
 		{
 			final Node child = compareItem(collectionNodeinstancesitem);
 			if (getDelegate().isReturnable(child))
 			{
 				collectionNode.addChild(child);
 			}
 		}
 	}
 
 	private Node compareItem(final CollectionNode collectionNode,
 							 final Instances instances,
							 final Object item)
	{
		return getDelegate().delegate(collectionNodeinstances.access(collectionNode.accessorForItem(item)));
	}
	private static Collection<?> findAddedItems(final Instances instances)
	{
		//noinspection unchecked
		return Collections.filteredCopyOf(instances.getWorking(Collection.class), instances.getBase(Collection.class));
	}
	private static Collection<?> findRemovedItems(final Instances instances)
	{
		//noinspection unchecked
		return Collections.filteredCopyOf(instances.getBase(Collection.class), instances.getWorking(Collection.class));
	}
	private static Iterable<?> findKnownItems(final Instances instances)
	{
		@SuppressWarnings({"unchecked"})
		final Collection<?> changed = new ArrayList<Object>(instances.getWorking(Collection.class));
		changed.removeAll(findAddedItems(instances));
		changed.removeAll(findRemovedItems(instances));
		return changed;
	}
New to GrepCode? Check out our FAQ X