// Path: src/main/java/de/danielbechler/util/Assert.java
// public class Assert
// {
// 	private Assert()
// 	{
// 	}
// 
// 	public static void equalTypesOrNull(final Object... objects)
// 	{
// 		final Collection<Class<?>> types = Classes.typesOf(objects);
// 		Class<?> previousType = null;
// 		for (final Class<?> type : types)
// 		{
// 			if (previousType != null && !type.equals(previousType))
// 			{
// 				throw new IllegalArgumentException("The given objects should be either null or of the same type ('" + previousType + "') = " + types);
// 			}
// 			previousType = type;
// 		}
// 	}
// 
// 	public static void notNull(final Object object, final String name)
// 	{
// 		if (object == null)
// 		{
// 			throw new IllegalArgumentException("'" + name + "' must not be null");
// 		}
// 	}
// 
// 	public static void notEmpty(final Collection<?> collection, final String name)
// 	{
// 		if (Collections.isEmpty(collection))
// 		{
// 			throw new IllegalArgumentException("'" + name + "' must not be null or empty");
// 		}
// 	}
// 
// 	/**
// 	 * Same as {@link #hasText(String, String)}.
// 	 *
// 	 * @see #hasText(String, String)
// 	 */
// 	public static void notEmpty(final String text, final String name) throws IllegalArgumentException
// 	{
// 		hasText(text, name);
// 	}
// 
// 	/**
// 	 * Ensures that the given <code>value</code> contains characters.
// 	 *
// 	 * @param value The value to check.
// 	 * @param name  The name of the variable (used for the exception message).
// 	 *
// 	 * @throws IllegalArgumentException If the given value is <code>null</code> or doesn't contain any non-whitespace
// 	 *                                  characters.
// 	 */
// 	public static void hasText(final String value, final String name) throws IllegalArgumentException
// 	{
// 		if (Strings.isEmpty(name)) // Yo dawg, I heard you like assertions, so I put an assertion in your assertion
// 		{
// 			throw new IllegalArgumentException("'name' must not be null or empty");
// 		}
// 		if (Strings.isEmpty(value))
// 		{
// 			throw new IllegalArgumentException("'" + name + "' must not be null or empty");
// 		}
// 	}
// }


import de.danielbechler.util.Assert;
/*
 * 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.selector;


/**
 * @author Daniel Bechler
 */
public final class BeanPropertyElementSelector extends ElementSelector
{
	private final String propertyName;

	public BeanPropertyElementSelector(final String propertyName)
	{
// Path: src/main/java/de/danielbechler/util/Assert.java
// public class Assert
// {
// 	private Assert()
// 	{
// 	}
// 
// 	public static void equalTypesOrNull(final Object... objects)
// 	{
// 		final Collection<Class<?>> types = Classes.typesOf(objects);
// 		Class<?> previousType = null;
// 		for (final Class<?> type : types)
// 		{
// 			if (previousType != null && !type.equals(previousType))
// 			{
// 				throw new IllegalArgumentException("The given objects should be either null or of the same type ('" + previousType + "') = " + types);
// 			}
// 			previousType = type;
// 		}
// 	}
// 
// 	public static void notNull(final Object object, final String name)
// 	{
// 		if (object == null)
// 		{
// 			throw new IllegalArgumentException("'" + name + "' must not be null");
// 		}
// 	}
// 
// 	public static void notEmpty(final Collection<?> collection, final String name)
// 	{
// 		if (Collections.isEmpty(collection))
// 		{
// 			throw new IllegalArgumentException("'" + name + "' must not be null or empty");
// 		}
// 	}
// 
// 	/**
// 	 * Same as {@link #hasText(String, String)}.
// 	 *
// 	 * @see #hasText(String, String)
// 	 */
// 	public static void notEmpty(final String text, final String name) throws IllegalArgumentException
// 	{
// 		hasText(text, name);
// 	}
// 
// 	/**
// 	 * Ensures that the given <code>value</code> contains characters.
// 	 *
// 	 * @param value The value to check.
// 	 * @param name  The name of the variable (used for the exception message).
// 	 *
// 	 * @throws IllegalArgumentException If the given value is <code>null</code> or doesn't contain any non-whitespace
// 	 *                                  characters.
// 	 */
// 	public static void hasText(final String value, final String name) throws IllegalArgumentException
// 	{
// 		if (Strings.isEmpty(name)) // Yo dawg, I heard you like assertions, so I put an assertion in your assertion
// 		{
// 			throw new IllegalArgumentException("'name' must not be null or empty");
// 		}
// 		if (Strings.isEmpty(value))
// 		{
// 			throw new IllegalArgumentException("'" + name + "' must not be null or empty");
// 		}
// 	}
// }


// Path: src/main/java/de/danielbechler/diff/selector/BeanPropertyElementSelector.java
import de.danielbechler.util.Assert;

/*
 * 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.selector;


/**
 * @author Daniel Bechler
 */
public final class BeanPropertyElementSelector extends ElementSelector
{
	private final String propertyName;

	public BeanPropertyElementSelector(final String propertyName)
	{
		Assert.hasText(propertyName, "propertyName");