Author: saces
Date: 2008-04-14 20:01:15 +0000 (Mon, 14 Apr 2008)
New Revision: 19336
Added:
trunk/plugins/KeyExplorer/VerySimpleGet.java
trunk/plugins/KeyExplorer/VerySimpleGetter.java
Log:
add a getter for KeyExplorer
Added: trunk/plugins/KeyExplorer/VerySimpleGet.java
===================================================================
--- trunk/plugins/KeyExplorer/VerySimpleGet.java
(rev 0)
+++ trunk/plugins/KeyExplorer/VerySimpleGet.java 2008-04-14 20:01:15 UTC
(rev 19336)
@@ -0,0 +1,99 @@
+/**
+ *
+ */
+package plugins.KeyExplorer;
+
+import java.io.IOException;
+
+import freenet.client.FetchContext;
+import freenet.client.async.BaseSingleFileFetcher;
+import freenet.client.async.ClientRequester;
+import freenet.keys.ClientKey;
+import freenet.keys.ClientKeyBlock;
+import freenet.keys.KeyDecodeException;
+import freenet.keys.TooBigException;
+import freenet.node.LowLevelGetException;
+import freenet.node.RequestScheduler;
+import freenet.support.Logger;
+import freenet.support.api.Bucket;
+
+/**
+ * @author saces
+ *
+ */
+public class VerySimpleGet extends BaseSingleFileFetcher {
+
+ private boolean finished = false;
+ private LowLevelGetException error;
+ private Bucket data;
+ private final Object waiter = new Object();
+ private boolean ismetadata;
+
+ public VerySimpleGet(ClientKey key2, int maxRetries2, FetchContext
ctx2, ClientRequester parent2) {
+ super(key2, maxRetries2, ctx2, parent2);
+ }
+
+ public void onFailure(LowLevelGetException e, Object token,
RequestScheduler sheduler) {
+ error = e;
+ finished = true;
+ Logger.error(this, "TODO", e);
+ synchronized(waiter)
+ {
+ waiter.notifyAll();
+ }
+ }
+
+ public void onSuccess(ClientKeyBlock block, boolean fromStore, Object
token, RequestScheduler sheduler) {
+ data = extract(block);
+ ismetadata = block.isMetadata();
+ if(data == null) return; // failed
+ finished = true;
+ Logger.error(this, "TODO", new Error("TODO"));
+ synchronized(waiter)
+ {
+ waiter.notifyAll();
+ }
+ }
+
+ public Bucket waitForCompletion() throws LowLevelGetException {
+ while(!finished) {
+ try {
+ synchronized(waiter)
+ {
+ waiter.wait();
+ }
+ } catch (InterruptedException e) {
+ // Ignore
+ }
+ }
+ Logger.error(this, "TODO", new Error("TODO"));
+ if(error != null) throw error;
+ return data;
+ }
+
+ private Bucket extract(ClientKeyBlock block) {
+ Bucket tempdata;
+ try {
+ // FIXME What is the maximim size of an decompressed
32K chunk?
+ tempdata = block.decode(getContext().bucketFactory,
1024*1024, false);
+ } catch (KeyDecodeException e1) {
+ if(Logger.shouldLog(Logger.MINOR, this))
+ Logger.minor(this, "Decode failure: "+e1, e1);
+ onFailure(new
LowLevelGetException(LowLevelGetException.DECODE_FAILED), null, null);
+ return null;
+ } catch (TooBigException e) {
+ Logger.error(this, "Should never happens: "+e, e);
+ onFailure(new
LowLevelGetException(LowLevelGetException.INTERNAL_ERROR), null, null);
+ return null;
+ } catch (IOException e) {
+ Logger.error(this, "Could not capture data - disk
full?: "+e, e);
+ onFailure(new
LowLevelGetException(LowLevelGetException.DECODE_FAILED), null, null);
+ return null;
+ }
+ return tempdata;
+ }
+
+ public boolean isMetadata() {
+ return ismetadata;
+ }
+}
Added: trunk/plugins/KeyExplorer/VerySimpleGetter.java
===================================================================
--- trunk/plugins/KeyExplorer/VerySimpleGetter.java
(rev 0)
+++ trunk/plugins/KeyExplorer/VerySimpleGetter.java 2008-04-14 20:01:15 UTC
(rev 19336)
@@ -0,0 +1,49 @@
+/**
+ *
+ */
+package plugins.KeyExplorer;
+
+import freenet.client.async.ClientGetState;
+import freenet.client.async.ClientRequestScheduler;
+import freenet.client.async.ClientRequester;
+import freenet.keys.FreenetURI;
+import freenet.support.Logger;
+
+/**
+ * @author saces
+ *
+ */
+public class VerySimpleGetter extends ClientRequester {
+
+ private FreenetURI uri;
+
+ /**
+ * @param priorityclass
+ * @param chkscheduler
+ * @param sskscheduler
+ * @param client2
+ *
+ */
+ public VerySimpleGetter(short priorityclass, ClientRequestScheduler
chkscheduler, ClientRequestScheduler sskscheduler, FreenetURI uri2, Object
client2) {
+ super(priorityclass, chkscheduler, sskscheduler, client2);
+ uri = uri2;
+ }
+
+ public FreenetURI getURI() {
+ return uri;
+ }
+
+ public boolean isFinished() {
+ Logger.error(this, "TODO", new Error("TODO"));
+ return false;
+ }
+
+ public void notifyClients() {
+ Logger.error(this, "TODO", new Error("TODO"));
+ }
+
+ public void onTransition(ClientGetState oldState, ClientGetState
newState) {
+ Logger.error(this, "TODO", new Error("TODO"));
+ }
+
+}