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.example;
 
 
 import java.util.*;
 
 import static java.util.Arrays.*;

Author(s):
Daniel Bechler
 
 {
 	{
 	}
 
 	@SuppressWarnings("unchecked")
 	public static void main(final String[] args)
 	{
 		final AddressBook workingAddressBook = new AddressBook();
 		final Contact workingContact = new Contact("Walter White""Heisenberg");
 		workingAddressBook.setContacts(asList(workingContact));
 
 		final AddressBook baseAddressBook = new AddressBook();
 		final Contact baseContact = new Contact("Walter White");
 		baseAddressBook.setContacts(asList(baseContact));
 
 		final Node rootNode = ObjectDifferFactory.getInstance().compare(workingAddressBookbaseAddressBook);
 		final Node contactsNode = getFirstChildOf(rootNode);
 		final Node contactNode = getFirstChildOf(contactsNode);
 		final Node nicknameNode = getFirstChildOf(contactNode);
 
 		rootNode.visit(new NodeHierarchyVisitor());
 
 		/*
 
 		Output:
 
 		/ ===> DefaultNode(state=CHANGED, type=de.danielbechler.diff.example.CanonicalAccessorExample.AddressBook, 1 child, accessed via root element)
 		  /contacts ===> CollectionNode(state=CHANGED, type=java.util.List, 1 child, accessed via property 'contacts')
 		    /contacts[Contact{name='Walter White'}] ===> DefaultNode(state=CHANGED, type=de.danielbechler.diff.example.CanonicalAccessorExample.Contact, 1 child, accessed via collection item [Contact{name='Walter White'}])
 		      /contacts[Contact{name='Walter White'}]/nickname ===> DefaultNode(state=ADDED, type=java.lang.String, no children, accessed via property 'nickname')
 
 		 */
 
 		final AddressBook addressBook = (AddressBookrootNode.get(workingAddressBook);
 		final List<Contactcontacts = (List<Contact>) contactsNode.get(addressBook);
 		final Contact contact = (ContactcontactNode.get(contacts);
 
 		assert rootNode.get(workingAddressBook) == rootNode.canonicalGet(workingAddressBook);
 		assert contactsNode.get(addressBook) == contactsNode.canonicalGet(workingAddressBook);
 		assert contactNode.get(contacts) == contactNode.canonicalGet(workingAddressBook);
 		assert nicknameNode.get(contact) == nicknameNode.canonicalGet(workingAddressBook);
 	}
 
 	private static Node getFirstChildOf(final Node rootNode)
 	{
 		return rootNode.getChildren().iterator().next();
 	}
 
 	public static class AddressBook
 	{
 		private List<Contactcontacts = new LinkedList<Contact>();
 
 		public List<ContactgetContacts()
 		{
 			return ;
 		}
 
 		public void setContacts(final List<Contactcontacts)
 		{
 			this. = contacts;
 		}
 	}
 
 	public static class Contact
 	{
 		private final String name;
 		private String nickname;
 
 		public Contact(final String name)
 		{
			this. = name;
		}
		public Contact(final String namefinal String nickname)
		{
			this. = name;
			this. = nickname;
		}
		public String getName()
		{
			return ;
		}
		{
			return ;
		}
		public void setNickname(final String nickname)
		{
			this. = nickname;
		}
		public boolean equals(final Object o)
		{
			if (this == o)
			{
				return true;
			}
			if (!(o instanceof Contact))
			{
				return false;
			}
			final Contact contact = (Contacto;
			if ( != null ? !.equals(contact.name) : contact.name != null)
			{
				return false;
			}
			return true;
		}
		public int hashCode()
		{
			return  != null ? .hashCode() : 0;
		}
		public String toString()
		{
			final StringBuilder sb = new StringBuilder();
			sb.append("Contact");
			sb.append("{name='").append().append('\'');
			sb.append('}');
			return sb.toString();
		}
	}
New to GrepCode? Check out our FAQ X