Author: toad
Date: 2006-03-10 17:35:44 +0000 (Fri, 10 Mar 2006)
New Revision: 8218

Added:
   trunk/freenet/src/freenet/client/async/ManifestElement.java
Modified:
   trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
   trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java
   trunk/freenet/src/freenet/node/Version.java
Log:
519:
Change API of SimpleManifestPutter to allow for MIME type overrides.
PUTDIR should still work.
Preparatory to FCP putdir.

Modified: trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java
===================================================================
--- trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java     
2006-03-10 17:21:09 UTC (rev 8217)
+++ trunk/freenet/src/freenet/client/HighLevelSimpleClientImpl.java     
2006-03-10 17:35:44 UTC (rev 8218)
@@ -129,7 +129,7 @@
        public FreenetURI insertManifest(FreenetURI insertURI, HashMap 
bucketsByName, String defaultName) throws InserterException {
                PutWaiter pw = new PutWaiter();
                SimpleManifestPutter putter =
-                       new SimpleManifestPutter(pw, node.chkPutScheduler, 
node.sskPutScheduler, bucketsByName, priorityClass, insertURI, defaultName, 
getInserterContext(), false, this);
+                       new SimpleManifestPutter(pw, node.chkPutScheduler, 
node.sskPutScheduler, 
SimpleManifestPutter.bucketsByNameToManifestEntries(bucketsByName), 
priorityClass, insertURI, defaultName, getInserterContext(), false, this);
                return pw.waitForCompletion();
        }


Added: trunk/freenet/src/freenet/client/async/ManifestElement.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ManifestElement.java 2006-03-10 
17:21:09 UTC (rev 8217)
+++ trunk/freenet/src/freenet/client/async/ManifestElement.java 2006-03-10 
17:35:44 UTC (rev 8218)
@@ -0,0 +1,36 @@
+package freenet.client.async;
+
+import freenet.support.Bucket;
+
+/**
+ * Represents an element in a manifest. Fed to SimpleManifestPutter.
+ */
+public class ManifestElement {
+
+       /** Filename */
+       final String name;
+       
+       /** Data to be inserted */
+       final Bucket data;
+       
+       /** MIME type override. null => use default for filename */
+       final String mimeOverride;
+       
+       public ManifestElement(String name, Bucket data, String mimeOverride) {
+               this.name = name;
+               this.data = data;
+               this.mimeOverride = mimeOverride;
+       }
+       
+       public int hashCode() {
+               return name.hashCode();
+       }
+       
+       public boolean equals(Object o) {
+               if(this == o) return true;
+               if(o instanceof ManifestElement) {
+                       if(((ManifestElement)o).name.equals(name)) return true;
+               }
+               return false;
+       }
+}

Modified: trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java    
2006-03-10 17:21:09 UTC (rev 8217)
+++ trunk/freenet/src/freenet/client/async/SimpleManifestPutter.java    
2006-03-10 17:35:44 UTC (rev 8218)
@@ -158,7 +158,7 @@
                new String[] { "index.html", "index.htm", "default.html", 
"default.htm" };

        public SimpleManifestPutter(ClientCallback cb, ClientRequestScheduler 
chkSched,
-                       ClientRequestScheduler sskSched, HashMap bucketsByName, 
short prioClass, FreenetURI target, 
+                       ClientRequestScheduler sskSched, HashSet 
manifestElements, short prioClass, FreenetURI target, 
                        String defaultName, InserterContext ctx, boolean 
getCHKOnly, Object clientContext) throws InserterException {
                super(prioClass, chkSched, sskSched, clientContext);
                this.defaultName = defaultName;
@@ -170,11 +170,14 @@
                runningPutHandlers = new HashSet();
                putHandlersWaitingForMetadata = new HashSet();
                waitingForBlockSets = new HashSet();
-               Iterator it = bucketsByName.keySet().iterator();
+               Iterator it = manifestElements.iterator();
                while(it.hasNext()) {
-                       String name = (String) it.next();
-                       Bucket data = (Bucket) bucketsByName.get(name);
-                       String mimeType = DefaultMIMETypes.guessMIMEType(name);
+                       ManifestElement element = (ManifestElement) it.next();
+                       String name = element.name;
+                       Bucket data = element.data;
+                       String mimeType = element.mimeOverride;
+                       if(mimeType == null)
+                               mimeType = DefaultMIMETypes.guessMIMEType(name);
                        ClientMetadata cm;
                        if(mimeType.equals(DefaultMIMETypes.DEFAULT_MIME_TYPE))
                                cm = null;
@@ -335,4 +338,20 @@
                this.blockSetFinalized();
        }

+       /**
+        * Convert a HashMap of name -> bucket to a HashSet of ManifestEntry's.
+        * All are to have mimeOverride=null, i.e. we use the auto-detected 
mime type
+        * from the filename.
+        */
+       public static HashSet bucketsByNameToManifestEntries(HashMap 
bucketsByName) {
+               HashSet manifestEntries = new HashSet();
+               Iterator i = bucketsByName.keySet().iterator();
+               while(i.hasNext()) {
+                       String name = (String) i.next();
+                       Bucket data = (Bucket) bucketsByName.get(name);
+                       manifestEntries.add(new ManifestElement(name, data, 
null));
+               }
+               return manifestEntries;
+       }
+
 }

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-03-10 17:21:09 UTC (rev 
8217)
+++ trunk/freenet/src/freenet/node/Version.java 2006-03-10 17:35:44 UTC (rev 
8218)
@@ -20,7 +20,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 518;
+       private static final int buildNumber = 519;

        /** Oldest build of Fred we will talk to */
        private static final int lastGoodBuild = 507;


Reply via email to