Author: nextgens
Date: 2006-09-05 12:15:40 +0000 (Tue, 05 Sep 2006)
New Revision: 10391

Modified:
   trunk/freenet/src/freenet/support/SimpleFieldSet.java
Log:
Improve SimpleFieldSet() providing a sorted output

Modified: trunk/freenet/src/freenet/support/SimpleFieldSet.java
===================================================================
--- trunk/freenet/src/freenet/support/SimpleFieldSet.java       2006-09-05 
09:38:41 UTC (rev 10390)
+++ trunk/freenet/src/freenet/support/SimpleFieldSet.java       2006-09-05 
12:15:40 UTC (rev 10391)
@@ -11,6 +11,7 @@
 import java.io.StringWriter;
 import java.io.UnsupportedEncodingException;
 import java.io.Writer;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -35,6 +36,12 @@
                subsets = null;
         read(br);
     }
+    
+    public SimpleFieldSet(SimpleFieldSet sfs){
+       values = new HashMap(sfs.values);
+       subsets = new HashMap(sfs.subsets);
+       endMarker = sfs.endMarker;
+    }

     public SimpleFieldSet(LineReader lis, int maxLineLength, int 
lineBufferSize, boolean tolerant, boolean utf8OrIso88591) throws IOException {
        values = new HashMap();
@@ -249,6 +256,52 @@
        }
     }

+    public void writeToOrdered(Writer w) throws IOException {
+               writeToOrdered(w, "", false);
+       }
+    
+    synchronized void writeToOrdered(Writer w, String prefix, boolean 
noEndMarker) throws IOException {
+       Object[] objects = values.keySet().toArray();
+       String[] orderedValues = new String[values.size()];
+       int i=0;
+    
+       // Stringify
+       for(i=0; i < values.size(); i++)
+               orderedValues[i] = objects[i].toString();
+       
+       // Sort
+       Arrays.sort(orderedValues);
+       
+       // Output
+       for(i=0; i < orderedValues.length; i++)
+               w.write(prefix+orderedValues[i]+'='+get(orderedValues[i])+'\n');
+       
+       if(subsets != null) {
+               objects = subsets.keySet().toArray();
+               String[] orderedPrefixes = new String[subsets.size()];
+               
+               // Stringify
+               for(i=0; i < subsets.size(); i++)
+                       orderedPrefixes[i] = objects[i].toString();
+               
+               // Sort
+               Arrays.sort(orderedPrefixes);
+               
+               for(i=0; i < orderedPrefixes.length; i++) {
+                       SimpleFieldSet subset = subset(orderedPrefixes[i]);
+                       if(subset == null) throw new NullPointerException();
+                       subset.writeToOrdered(w, 
prefix+orderedPrefixes[i]+MULTI_LEVEL_CHAR, true);
+               }
+       }
+    
+       if(!noEndMarker) {
+               if(endMarker == null)
+                       w.write("End\n");
+               else
+                       w.write(endMarker+"\n");
+       }
+    }
+    
     public String toString() {
         StringWriter sw = new StringWriter();
         try {
@@ -259,6 +312,16 @@
         return sw.toString();
     }

+    public String toOrderedString() {
+       StringWriter sw = new StringWriter();
+        try {
+            writeToOrdered(sw);
+        } catch (IOException e) {
+            Logger.error(this, "WTF?!: "+e+" in toString()!", e);
+        }
+        return sw.toString();
+    }
+    
     public String getEndMarker() {
        return endMarker;
     }


Reply via email to