UIDefaultsDump: fixed order of removed values in diff dumps

This commit is contained in:
Karl Tauber
2020-06-19 13:38:25 +02:00
parent 6568cee2e8
commit 1ba27730d6
2 changed files with 30 additions and 24 deletions

View File

@@ -36,6 +36,8 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.TreeSet;
import java.util.function.Predicate;
import javax.swing.Icon;
import javax.swing.ImageIcon;
@@ -208,29 +210,33 @@ public class UIDefaultsDump
}
private static String diff( Map<String, String> defaults1, Map<String, String> defaults2 ) {
defaults1 = new LinkedHashMap<>( defaults1 );
TreeSet<String> keys = new TreeSet<>();
keys.addAll( defaults1.keySet() );
keys.addAll( defaults2.keySet() );
StringBuilder buf = new StringBuilder( 10000 );
for( Map.Entry<String, String> e : defaults2.entrySet() ) {
String key = e.getKey();
String value2 = e.getValue();
String value1 = defaults1.remove( key );
if( !value2.equals( value1 ) ) {
if( value1 != null )
buf.append( "- " ).append( key ).append( value1 ).append( '\n' );
buf.append( "+ " ).append( key ).append( value2 ).append( '\n' );
buf.append( '\n' );
}
}
for( Map.Entry<String, String> e : defaults1.entrySet() ) {
buf.append( "- " ).append( e.getKey() ).append( e.getValue() ).append( '\n' );
buf.append( '\n' );
}
// diff header values
for( String key : new String[] { "Class", "ID", "Name", "Java", "OS" } )
diffValue( buf, key, defaults1.remove( key ), defaults2.remove( key ) );
// diff values
for( String key : keys )
diffValue( buf, key, defaults1.get( key ), defaults2.get( key ) );
return buf.toString();
}
private static void diffValue( StringBuilder buf, String key, String value1, String value2 ) {
if( !Objects.equals( value1, value2 ) ) {
if( value1 != null )
buf.append( "- " ).append( key ).append( value1 ).append( '\n' );
if( value2 != null )
buf.append( "+ " ).append( key ).append( value2 ).append( '\n' );
buf.append( '\n' );
}
}
private static Map<String, String> parse( Reader in ) throws IOException {
Map<String, String> defaults = new LinkedHashMap<>();
try( BufferedReader reader = new BufferedReader( in ) ) {