// Path: src/main/java/de/danielbechler/util/Strings.java
// public class Strings
// {
// 	private static final Pattern LINE_BREAK_PATTERN = Pattern.compile("\\s*\\n\\s*");
// 
// 	private Strings()
// 	{
// 	}
// 
// 	@SuppressWarnings("SizeReplaceableByIsEmpty") // String.isEmpty() is a Java 1.6 feature
// 	public static boolean hasText(final String s)
// 	{
// 		return s != null && s.trim().length() != 0;
// 	}
// 
// 	public static boolean isEmpty(final String s)
// 	{
// 		return !hasText(s);
// 	}
// 
// 	/**
// 	 * Joins all non-null elements of the given <code>elements</code> into one String.
// 	 *
// 	 * @param delimiter Inserted as separator between consecutive elements.
// 	 * @param elements  The elements to join.
// 	 *
// 	 * @return A long string containing all non-null elements.
// 	 */
// 	public static String join(final String delimiter, final Object... elements)
// 	{
// 		final StringBuilder sb = new StringBuilder();
// 		for (final Object part : elements)
// 		{
// 			if (part == null)
// 			{
// 				continue;
// 			}
// 			if (sb.length() > 0)
// 			{
// 				sb.append(delimiter);
// 			}
// 			sb.append(part.toString());
// 		}
// 		return sb.toString();
// 	}
// 
// 	/**
// 	 * Same as {@link #join(String, Object...)} but with a {@link Collection} instead of an Array for the
// 	 * elements.
// 	 *
// 	 * @see #join(String, java.util.Collection)
// 	 */
// 	public static String join(final String delimiter, final Collection<?> elements)
// 	{
// 		if (elements == null || elements.isEmpty())
// 		{
// 			return "";
// 		}
// 		return join(delimiter, elements.toArray(new Object[elements.size()]));
// 	}
// 
// 	public static String toSingleLineString(final Object object)
// 	{
// 		if (object != null)
// 		{
// 			final String s = object.toString().trim();
// 			final Matcher matcher = LINE_BREAK_PATTERN.matcher(s);
// 			return matcher.replaceAll(" \\\\ ");
// 		}
// 		return null;
// 	}
// 
// 	public static String indent(final int times, final String text)
// 	{
// 		final StringBuilder sb = new StringBuilder();
// 		for (int i = 0; i < times; i++)
// 		{
// 			sb.append("  ");
// 		}
// 		sb.append(text);
// 		return sb.toString();
// 	}
// }


import de.danielbechler.diff.introspection.ObjectDiffEqualsOnlyType;
import de.danielbechler.diff.introspection.ObjectDiffProperty;
import de.danielbechler.util.Strings;
/*
 * Copyright 2014 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.comparison;


/**
 * Created by Daniel Bechler.
 */
public class ObjectDiffPropertyComparisonStrategyResolver
{
	public static final ObjectDiffPropertyComparisonStrategyResolver instance;

	static
	{
		instance = new ObjectDiffPropertyComparisonStrategyResolver();
	}

	private ObjectDiffPropertyComparisonStrategyResolver()
	{
	}

	@SuppressWarnings("MethodMayBeStatic")
	public ComparisonStrategy comparisonStrategyForAnnotation(final ObjectDiffProperty annotation)
	{
		if (annotation == null || !annotation.equalsOnly())
		{
			return null;
		}
// Path: src/main/java/de/danielbechler/util/Strings.java
// public class Strings
// {
// 	private static final Pattern LINE_BREAK_PATTERN = Pattern.compile("\\s*\\n\\s*");
// 
// 	private Strings()
// 	{
// 	}
// 
// 	@SuppressWarnings("SizeReplaceableByIsEmpty") // String.isEmpty() is a Java 1.6 feature
// 	public static boolean hasText(final String s)
// 	{
// 		return s != null && s.trim().length() != 0;
// 	}
// 
// 	public static boolean isEmpty(final String s)
// 	{
// 		return !hasText(s);
// 	}
// 
// 	/**
// 	 * Joins all non-null elements of the given <code>elements</code> into one String.
// 	 *
// 	 * @param delimiter Inserted as separator between consecutive elements.
// 	 * @param elements  The elements to join.
// 	 *
// 	 * @return A long string containing all non-null elements.
// 	 */
// 	public static String join(final String delimiter, final Object... elements)
// 	{
// 		final StringBuilder sb = new StringBuilder();
// 		for (final Object part : elements)
// 		{
// 			if (part == null)
// 			{
// 				continue;
// 			}
// 			if (sb.length() > 0)
// 			{
// 				sb.append(delimiter);
// 			}
// 			sb.append(part.toString());
// 		}
// 		return sb.toString();
// 	}
// 
// 	/**
// 	 * Same as {@link #join(String, Object...)} but with a {@link Collection} instead of an Array for the
// 	 * elements.
// 	 *
// 	 * @see #join(String, java.util.Collection)
// 	 */
// 	public static String join(final String delimiter, final Collection<?> elements)
// 	{
// 		if (elements == null || elements.isEmpty())
// 		{
// 			return "";
// 		}
// 		return join(delimiter, elements.toArray(new Object[elements.size()]));
// 	}
// 
// 	public static String toSingleLineString(final Object object)
// 	{
// 		if (object != null)
// 		{
// 			final String s = object.toString().trim();
// 			final Matcher matcher = LINE_BREAK_PATTERN.matcher(s);
// 			return matcher.replaceAll(" \\\\ ");
// 		}
// 		return null;
// 	}
// 
// 	public static String indent(final int times, final String text)
// 	{
// 		final StringBuilder sb = new StringBuilder();
// 		for (int i = 0; i < times; i++)
// 		{
// 			sb.append("  ");
// 		}
// 		sb.append(text);
// 		return sb.toString();
// 	}
// }


// Path: src/main/java/de/danielbechler/diff/comparison/ObjectDiffPropertyComparisonStrategyResolver.java
import de.danielbechler.diff.introspection.ObjectDiffEqualsOnlyType;
import de.danielbechler.diff.introspection.ObjectDiffProperty;
import de.danielbechler.util.Strings;

/*
 * Copyright 2014 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.comparison;


/**
 * Created by Daniel Bechler.
 */
public class ObjectDiffPropertyComparisonStrategyResolver
{
	public static final ObjectDiffPropertyComparisonStrategyResolver instance;

	static
	{
		instance = new ObjectDiffPropertyComparisonStrategyResolver();
	}

	private ObjectDiffPropertyComparisonStrategyResolver()
	{
	}

	@SuppressWarnings("MethodMayBeStatic")
	public ComparisonStrategy comparisonStrategyForAnnotation(final ObjectDiffProperty annotation)
	{
		if (annotation == null || !annotation.equalsOnly())
		{
			return null;
		}
		if (Strings.hasText(annotation.equalsOnlyValueProviderMethod()))