//MapPrinter.java
//
// Licensed under the AGPL - http://www.gnu.org/licenses/agpl-3.0.txt
// (c) SZE-Development Team
package net.sf.sze.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * Schreibt den Inhalt einer Map in eine Datei.
 *
 */
public class MapPrinter {

    /**
     * The Logger for the controller.
     */
    private static final Logger LOG = LoggerFactory.getLogger(MapPrinter.class);

    private final String outputName;

    private final boolean keysOnly;

    /**
     * Initiates an object of type MapPrinter.
     * @param outputName der Dateiname wohin die Daten geschrieben werden sollen.
     * @param keysOnly true wenn nur die Schlüssel geschrieben werden sollen.
     */
    public MapPrinter(String outputName, boolean keysOnly) {
        super();
        this.outputName = outputName;
        this.keysOnly = keysOnly;
    }

    /**
     * Initiates an object of type MapPrinter.
     * @param output der Dateiname wohin die Daten geschrieben werden sollen.
     */
    public MapPrinter(String output) {
        this(output, false);
    }

    /**
     * Schreibt eine Map in die Datei.
     * @param map die Map.
     */
    public void print(Map<String, Object> map) {
        try (PrintStream output = new PrintStream(new File(outputName))) {
            printInternal("", map, output);
        } catch (FileNotFoundException e) {
            LOG.error("Fehler beim Schreiben der Map", e);
            throw new RuntimeException("Map konnte nicht geschrieben werden", e);
        }
    }

    @SuppressWarnings("unchecked")
    private void printInternal(String prefix, Map<String, ?> map, PrintStream out) {
        for (Map.Entry<String, ?> entry : map.entrySet()) {
            final String key = entry.getKey();
            final Object value = entry.getValue();
            if (value instanceof Map) {
                printInternal(prefix + key + ".", (Map<String, ?>) value, out);
            } else {
                out.print(prefix + key);
                if (keysOnly) {
                    out.println();
                } else {
                    out.println(" -> " + value);
                }
            }
        }
    }

}

@@ -225,16 +225,97 @@
 Stream;%0A
+import java.util.ArrayList;%0Aimport java.util.Collections;%0Aimport java.util.List;%0A
 import j
@@ -685,16 +685,83 @@
 sOnly;%0A%0A
+    private final List%3CString%3E listOfEntries = new ArrayList%3C%3E();%0A%0A
     /**%0A
@@ -1570,39 +1570,179 @@
     
-printInternal(%22%22, map, output);
+collectEntries(%22%22, map);%0A            Collections.sort(listOfEntries);%0A            for (String entry : listOfEntries) %7B%0A                output.println(entry);%0A            %7D
 %0A   
@@ -1992,29 +1992,30 @@
 te void 
-printInternal
+collectEntries
 (String 
@@ -2044,25 +2044,8 @@
  map
-, PrintStream out
 ) %7B%0A
@@ -2262,21 +2262,22 @@
     
-printInternal
+collectEntries
 (pre
@@ -2319,13 +2319,8 @@
 alue
-, out
 );%0A 
@@ -2355,25 +2355,63 @@
         
-out.print
+StringBuilder entryAsString = new StringBuilder
 (prefix 
@@ -2438,16 +2438,17 @@
     if (
+!
 keysOnly
@@ -2471,28 +2471,90 @@
         
-out.println(
+entryAsString.append(%22 -%3E %22 + value.toString().replaceAll(%22%5C%5Cn%22, %22#@NL@#%22)
 );%0A     
@@ -2557,39 +2557,32 @@
                %7D
- else %7B
 %0A               
@@ -2586,58 +2586,52 @@
     
-    out.println(%22 -%3E %22 + value);%0A                %7D
+listOfEntries.add(entryAsString.toString());
 %0A   

Printer verbessert, so dass jetzt im Printer sortiert wird. Außerdem wird \n durch #@NL@# ersetzt.