Add method to insert a directory into Freenet.
[Sone.git] / src / main / java / net / pterodactylus / sone / core / FreenetInterface.java
index 8f9ec8f..aa46f93 100644 (file)
@@ -17,6 +17,7 @@
 
 package net.pterodactylus.sone.core;
 
+import java.util.HashMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -25,6 +26,7 @@ import net.pterodactylus.util.service.AbstractService;
 import freenet.client.FetchException;
 import freenet.client.FetchResult;
 import freenet.client.HighLevelSimpleClient;
+import freenet.client.InsertException;
 import freenet.keys.FreenetURI;
 import freenet.node.Node;
 
@@ -39,6 +41,7 @@ public class FreenetInterface extends AbstractService {
        private static final Logger logger = Logging.getLogger(FreenetInterface.class);
 
        /** The node to interact with. */
+       @SuppressWarnings("unused")
        private final Node node;
 
        /** The high-level client to use for requests. */
@@ -69,11 +72,46 @@ public class FreenetInterface extends AbstractService {
         * @return The result of the fetch, or {@code null} if an error occured
         */
        public FetchResult fetchUri(FreenetURI uri) {
+               logger.entering(FreenetInterface.class.getName(), "fetchUri(FreenetURI)", uri);
+               FetchResult fetchResult = null;
                try {
-                       return client.fetch(uri);
+                       fetchResult = client.fetch(uri);
                } catch (FetchException fe1) {
                        logger.log(Level.WARNING, "Could not fetch “" + uri + "”!", fe1);
-                       return null;
+               } finally {
+                       logger.exiting(FreenetInterface.class.getName(), "fetchUri(FreenetURI)", fetchResult);
+               }
+               return fetchResult;
+       }
+
+       /**
+        * Creates a key pair.
+        *
+        * @return The request key at index 0, the insert key at index 1
+        */
+       public String[] generateKeyPair() {
+               FreenetURI[] keyPair = client.generateKeyPair("");
+               return new String[] { keyPair[1].toString(), keyPair[0].toString() };
+       }
+
+       /**
+        * Inserts a directory into Freenet.
+        *
+        * @param insertUri
+        *            The insert URI
+        * @param manifestEntries
+        *            The directory entries
+        * @param defaultFile
+        *            The name of the default file
+        * @return The generated URI
+        * @throws SoneException
+        *             if an insert error occurs
+        */
+       public FreenetURI insertDirectory(FreenetURI insertUri, HashMap<String, Object> manifestEntries, String defaultFile) throws SoneException {
+               try {
+                       return client.insertManifest(insertUri, manifestEntries, defaultFile);
+               } catch (InsertException ie1) {
+                       throw new SoneException(null, ie1);
                }
        }