Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * 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.node;
 

Author(s):
Daniel Bechler
 
 public class PrintingVisitor implements DiffNode.Visitor
 {
 	private final Object working;
 	private final Object base;
 
 	public PrintingVisitor(final Object workingfinal Object base)
 	{
 		this. = base;
 		this. = working;
 	}
 
 	public void node(final DiffNode nodefinal Visit visit)
 	{
 		if (filter(node))
 		{
 			final String text = differenceToString(node);
 			print(text);
 		}
 	}
 
 	protected boolean filter(final DiffNode node)
 	{
 		return (node.isRootNode() && !node.hasChanges())
 				|| (node.hasChanges() && !node.hasChildren());
 	}
 
 	protected String differenceToString(final DiffNode nodefinal Object basefinal Object modified)
 	{
 		final NodePath nodePath = node.getPath();
 		final String stateMessage = translateState(node.getState(), node.canonicalGet(base), node.canonicalGet(modified));
 		final String propertyMessage = String.format("Property at path '%s' %s"nodePathstateMessage);
 		final StringBuilder stringBuilder = new StringBuilder();
 		stringBuilder.append(propertyMessage);
 		if (node.isCircular())
 		{
 			stringBuilder.append(" (Circular reference detected: The property has already been processed at another position.)");
 		}
 		return stringBuilder.toString();
 	}
 
 	protected void print(final String text)
 	{
 		..println(text);
 	}
 
 	private static String translateState(final DiffNode.State statefinal Object basefinal Object modified)
 	{
 		if (state == ..)
 		{
 			return "has been ignored";
 		}
 		else if (state == ..)
 		{
 			return String.format("has changed from [ %s ] to [ %s ]",
 					Strings.toSingleLineString(base),
 					Strings.toSingleLineString(modified));
 		}
 		else if (state == ..)
 		{
 			return String.format("has been added => [ %s ]", Strings.toSingleLineString(modified));
 		}
 		else if (state == ..)
 		{
 			return String.format("with value [ %s ] has been removed", Strings.toSingleLineString(base));
 		}
 		else if (state == ..)
 		{
 			return "has not changed";
 		}
 		else if (state == ..)
 		{
 			return "has already been processed at another position. (Circular reference!)";
 		}
 		return '(' + state.name() + ')';
 	}
New to GrepCode? Check out our FAQ X