+++ /dev/null
-/*
- * fcplib - ConnectResult.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-/**
- * A result of the {@link HighLevelClient#connect(String)} operation.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class ConnectResult extends HighLevelResult {
-
- /** Whether the node is now connected. */
- private boolean connected;
-
- /**
- * Package-private constructor.
- */
- ConnectResult() {
- super(null);
- }
-
- /**
- * Returns whether the node is now connected.
- *
- * @return <code>true</code> if the node is now connected,
- * <code>false</code> otherwise
- */
- public boolean isConnected() {
- return connected;
- }
-
- /**
- * Sets whether the node is now connected.
- *
- * @param connected
- * <code>true</code> if the node is now connected,
- * <code>false</code> otherwise
- */
- void setConnected(boolean connected) {
- this.connected = connected;
- }
-
-}
+++ /dev/null
-/*
- * jFCPlib-high-level-client - DDAResult.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-/**
- * The result of a direct disk access check.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class DirectDiskAccessResult extends HighLevelResult {
-
- /** Whether reading is allowed. */
- private boolean readAllowed;
-
- /** Whether writing is allowed. */
- private boolean writeAllowed;
-
- /**
- * Package-private constructor.
- *
- * @param identifier
- * The identifier of the request
- */
- DirectDiskAccessResult(String identifier) {
- super(identifier);
- }
-
- /**
- * Returns whether reading the directory is allowed.
- *
- * @return <code>true</code> if the client is allowed to read from the
- * directory, <code>false</code> otherwise
- */
- public boolean isReadAllowed() {
- return readAllowed;
- }
-
- /**
- * Sets whether reading the directory is allowed.
- *
- * @param readAllowed
- * <code>true</code> if the client is allowed to read from the
- * directory, <code>false</code> otherwise
- */
- void setReadAllowed(boolean readAllowed) {
- this.readAllowed = readAllowed;
- }
-
- /**
- * Returns whether writing to the directory is allowed.
- *
- * @return <code>true</code> if the client is allowed to write to the
- * directory, <code>false</code> otherwise
- */
- public boolean isWriteAllowed() {
- return writeAllowed;
- }
-
- /**
- * Sets whether writing to the directory is allowed.
- *
- * @param writeAllowed
- * <code>true</code> if the client is allowed to write to the
- * directory, <code>false</code> otherwise
- */
- void setWriteAllowed(boolean writeAllowed) {
- this.writeAllowed = writeAllowed;
- }
-
-}
+++ /dev/null
-/*
- * jFCPlib-high-level-client - DownloadResult.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-/**
- * The result of a download.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class DownloadResult extends HighLevelProgress {
-
- /**
- * Package-private constructor.
- *
- * @param identifier
- * The identifier of the request
- */
- DownloadResult(String identifier) {
- super(identifier);
- }
-
-}
+++ /dev/null
-/*
- * jFCPlib-high-level-client - GetRequestResult.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-import net.pterodactylus.fcp.Persistence;
-import net.pterodactylus.fcp.PersistentGet;
-import net.pterodactylus.fcp.Priority;
-import net.pterodactylus.fcp.ReturnType;
-import net.pterodactylus.fcp.Verbosity;
-
-/**
- * A Get result result is generated by {@link HighLevelClient#getRequests()}.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class GetRequestResult extends RequestResult {
-
- /** The PersistentGet FCP message. */
- private final PersistentGet persistentGet;
-
- /**
- * Creates a new Get request result.
- *
- * @param persistentGet
- * The PersistentGet message wrapped by this result
- */
- public GetRequestResult(PersistentGet persistentGet) {
- super(persistentGet.getIdentifier());
- this.persistentGet = persistentGet;
- }
-
- /**
- * Returns the client token associated with the request.
- *
- * @return The client token
- * @see net.pterodactylus.fcp.PersistentGet#getClientToken()
- */
- public String getClientToken() {
- return persistentGet.getClientToken();
- }
-
- /**
- * Returns the filename of the request.
- *
- * @return The filename
- * @see net.pterodactylus.fcp.PersistentGet#getFilename()
- */
- public String getFilename() {
- return persistentGet.getFilename();
- }
-
- /**
- * Returns the maximum number of retries for the request.
- *
- * @return The maximum number of retries
- * @see net.pterodactylus.fcp.PersistentGet#getMaxRetries()
- */
- public int getMaxRetries() {
- return persistentGet.getMaxRetries();
- }
-
- /**
- * Returns the persistence level of the request
- *
- * @return The persistence level
- * @see net.pterodactylus.fcp.PersistentGet#getPersistence()
- */
- public Persistence getPersistence() {
- return persistentGet.getPersistence();
- }
-
- /**
- * Returns the priority of the request.
- *
- * @return The priority
- * @see net.pterodactylus.fcp.PersistentGet#getPriority()
- */
- public Priority getPriority() {
- return persistentGet.getPriority();
- }
-
- /**
- * Returns the return type of the request.
- *
- * @return The return type of the request
- * @see net.pterodactylus.fcp.PersistentGet#getReturnType()
- */
- public ReturnType getReturnType() {
- return persistentGet.getReturnType();
- }
-
- /**
- * Returns the temporary filename of the request.
- *
- * @return The temporary filename
- * @see net.pterodactylus.fcp.PersistentGet#getTempFilename()
- */
- public String getTempFilename() {
- return persistentGet.getTempFilename();
- }
-
- /**
- * Returns the URI of the request.
- *
- * @return The URI of the request
- * @see net.pterodactylus.fcp.PersistentGet#getURI()
- */
- public String getURI() {
- return persistentGet.getURI();
- }
-
- /**
- * Returns the verbosity of the request.
- *
- * @return The verbosity of the request
- * @see net.pterodactylus.fcp.PersistentGet#getVerbosity()
- */
- public Verbosity getVerbosity() {
- return persistentGet.getVerbosity();
- }
-
- /**
- * Returns whether this request is on the global queue.
- *
- * @return <code>true</code> if the request is on the global queue,
- * <code>false</code> if it is on the client-local queue
- * @see net.pterodactylus.fcp.PersistentGet#isGlobal()
- */
- public boolean isGlobal() {
- return persistentGet.isGlobal();
- }
-
-}
+++ /dev/null
-/*
- * fcplib - HighLevelCallback.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * A callback is used to notify users of the {@link HighLevelClient} that an
- * operation was completed.
- *
- * @param <R>
- * The type of the high-level operation result
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class HighLevelCallback<R extends HighLevelResult> {
-
- /** Object used for synchronization. */
- protected final Object syncObject = new Object();
-
- /** The list of callback listeners. */
- private final List<HighLevelCallbackListener<R>> highLevelCallbackListeners = Collections.synchronizedList(new ArrayList<HighLevelCallbackListener<R>>());
-
- /** Whether the result is complete. */
- protected boolean resultComplete = false;
-
- /** The result of the operation. */
- private R result = null;
-
- /**
- * Package-private construtor.
- *
- * @param result
- * The result of the operation
- */
- HighLevelCallback(R result) {
- this.result = result;
- }
-
- /**
- * Adds a callback listener to this callback. The callback listener will be
- * called as soon as the result of the operation is known. If the result is
- * already known, the listener will be called immediately. Also, as soon as
- * a listener was notified the listener is automatically removed from this
- * callback.
- *
- * @param highLevelCallbackListener
- * The listener to add
- */
- public void addHighLevelCallbackListener(HighLevelCallbackListener<R> highLevelCallbackListener) {
- highLevelCallbackListeners.add(highLevelCallbackListener);
- if (isDone()) {
- fireGotResult();
- }
- }
-
- /**
- * Removes a callback listener from this callback.
- *
- * @param highLevelCallbackListener
- * The listener to remove
- */
- public void removeHighLevelCallbackListener(HighLevelCallbackListener<R> highLevelCallbackListener) {
- highLevelCallbackListeners.remove(highLevelCallbackListener);
- }
-
- /**
- * Notifies all listeners that the result of the operation is now known. As
- * soon as a listener was notified it will be removed from the list of
- * listeners!
- *
- * @see HighLevelCallbackListener#gotResult(HighLevelCallback)
- */
- private synchronized void fireGotResult() {
- for (HighLevelCallbackListener<R> highLevelCallbackListener: highLevelCallbackListeners) {
- highLevelCallbackListener.gotResult(this);
- }
- highLevelCallbackListeners.clear();
- }
-
- /**
- * Returns whether the result of the operation is already known. If the
- * result is already known a call to {@link #getResult()} will not block.
- *
- * @return <code>true</code> if the result is already known,
- * <code>false</code> otherwise
- */
- public boolean isDone() {
- synchronized (syncObject) {
- return resultComplete;
- }
- }
-
- /**
- * Returns the result of the operation, blocking until it is known.
- *
- * @return The result of the operation
- * @throws InterruptedException
- * if {@link Object#wait()} was interrupted
- */
- public R getResult() throws InterruptedException {
- return getResult(0);
- }
-
- /**
- * Returns the result of the operation, blocking until it is known or the
- * given time (in milliseconds) has passed.
- *
- * @param waitTime
- * The time to wait for a result
- * @return The result of the operation, or <code>null</code> if the result
- * is still not known after <code>waitTime</code> milliseconds
- * have passed
- * @throws InterruptedException
- * if {@link Object#wait()} is interrupted
- */
- public R getResult(long waitTime) throws InterruptedException {
- synchronized (syncObject) {
- while (!resultComplete) {
- syncObject.wait(waitTime);
- }
- return result;
- }
- }
-
- /**
- * Returns the result even if it is not yet complete.
- *
- * @return The result of the operation
- */
- R getIntermediaryResult() {
- synchronized (syncObject) {
- return result;
- }
- }
-
- /**
- * Marks the result as complete and notify the listeners. If the result was
- * already complete, nothing will be done.
- */
- void setDone() {
- synchronized (syncObject) {
- if (resultComplete) {
- return;
- }
- resultComplete = true;
- syncObject.notifyAll();
- }
- fireGotResult();
- }
-
-}
+++ /dev/null
-/*
- * fcplib - HighLevelCallbackListener.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-import java.util.EventListener;
-
-/**
- * Interface for objects that want to be notified as soon as a
- * {@link HighLevelCallback} received a result.
- *
- * @param <R>
- * The type of the high-level operation progress
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public interface HighLevelCallbackListener<R extends HighLevelResult> extends EventListener {
-
- /**
- * Notifies a listener that the given callback received a result. Use
- * {@link HighLevelCallback#getResult()} to retrieve the result.
- *
- * @param highLevelCallback
- * The callback that received a result
- */
- public void gotResult(HighLevelCallback<R> highLevelCallback);
-
-}
+++ /dev/null
-/*
- * fcplib - HighLevelClient.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.URL;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import net.pterodactylus.fcp.AddPeer;
-import net.pterodactylus.fcp.AllData;
-import net.pterodactylus.fcp.ClientGet;
-import net.pterodactylus.fcp.ClientHello;
-import net.pterodactylus.fcp.CloseConnectionDuplicateClientName;
-import net.pterodactylus.fcp.ConfigData;
-import net.pterodactylus.fcp.DataFound;
-import net.pterodactylus.fcp.EndListPeerNotes;
-import net.pterodactylus.fcp.EndListPeers;
-import net.pterodactylus.fcp.EndListPersistentRequests;
-import net.pterodactylus.fcp.FCPPluginReply;
-import net.pterodactylus.fcp.FcpConnection;
-import net.pterodactylus.fcp.FcpListener;
-import net.pterodactylus.fcp.FcpMessage;
-import net.pterodactylus.fcp.FcpUtils;
-import net.pterodactylus.fcp.FinishedCompression;
-import net.pterodactylus.fcp.GenerateSSK;
-import net.pterodactylus.fcp.GetFailed;
-import net.pterodactylus.fcp.IdentifierCollision;
-import net.pterodactylus.fcp.ListPeers;
-import net.pterodactylus.fcp.ListPersistentRequests;
-import net.pterodactylus.fcp.NodeData;
-import net.pterodactylus.fcp.NodeHello;
-import net.pterodactylus.fcp.NodeRef;
-import net.pterodactylus.fcp.Peer;
-import net.pterodactylus.fcp.PeerNote;
-import net.pterodactylus.fcp.PeerRemoved;
-import net.pterodactylus.fcp.PersistentGet;
-import net.pterodactylus.fcp.PersistentPut;
-import net.pterodactylus.fcp.PersistentPutDir;
-import net.pterodactylus.fcp.PersistentRequestModified;
-import net.pterodactylus.fcp.PersistentRequestRemoved;
-import net.pterodactylus.fcp.PluginInfo;
-import net.pterodactylus.fcp.ProtocolError;
-import net.pterodactylus.fcp.PutFailed;
-import net.pterodactylus.fcp.PutFetchable;
-import net.pterodactylus.fcp.PutSuccessful;
-import net.pterodactylus.fcp.ReturnType;
-import net.pterodactylus.fcp.SSKKeypair;
-import net.pterodactylus.fcp.SimpleProgress;
-import net.pterodactylus.fcp.StartedCompression;
-import net.pterodactylus.fcp.SubscribedUSKUpdate;
-import net.pterodactylus.fcp.TestDDAComplete;
-import net.pterodactylus.fcp.TestDDAReply;
-import net.pterodactylus.fcp.TestDDARequest;
-import net.pterodactylus.fcp.TestDDAResponse;
-import net.pterodactylus.fcp.URIGenerated;
-import net.pterodactylus.fcp.UnknownNodeIdentifier;
-import net.pterodactylus.fcp.UnknownPeerNoteType;
-import net.pterodactylus.fcp.WatchGlobal;
-
-/**
- * A high-level client that allows simple yet full-featured access to a Freenet
- * node.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class HighLevelClient {
-
- /** Logger. */
- private static final Logger logger = Logger.getLogger(HighLevelClient.class.getName());
-
- /** Object for internal synchronization. */
- private final Object syncObject = new Object();
-
- /** The name of the client. */
- private final String clientName;
-
- /** The FCP connection to the node. */
- private FcpConnection fcpConnection = null;
-
- /** Listeners for high-level client events. */
- private List<HighLevelClientListener> highLevelClientListeners = Collections.synchronizedList(new ArrayList<HighLevelClientListener>());
-
- /** The listener for the connection. */
- private HighLevelClientFcpListener highLevelClientFcpListener = new HighLevelClientFcpListener();
-
- /** The listeners for progress events. */
- private List<HighLevelProgressListener> highLevelProgressListeners = Collections.synchronizedList(new ArrayList<HighLevelProgressListener>());
-
- /** The callback for {@link #connect(String)}. */
- private HighLevelCallback<ConnectResult> connectCallback;
-
- /** Mapping from request identifiers to callbacks. */
- private Map<String, HighLevelCallback<KeyGenerationResult>> keyGenerationCallbacks = Collections.synchronizedMap(new HashMap<String, HighLevelCallback<KeyGenerationResult>>());
-
- /** Mapping from request identifier to peer list callbacks. */
- private Map<String, HighLevelCallback<PeerListResult>> peerListCallbacks = Collections.synchronizedMap(new HashMap<String, HighLevelCallback<PeerListResult>>());
-
- /** Mapping from request identifier to peer callbacks. */
- private Map<String, HighLevelCallback<PeerResult>> peerCallbacks = Collections.synchronizedMap(new HashMap<String, HighLevelCallback<PeerResult>>());
-
- /** Mapping from directories to DDA callbacks. */
- private Map<String, HighLevelCallback<DirectDiskAccessResult>> directDiskAccessCallbacks = Collections.synchronizedMap(new HashMap<String, HighLevelCallback<DirectDiskAccessResult>>());
-
- /** Mapping from request identifiers to download callbacks. */
- private Map<String, HighLevelProgressCallback<DownloadResult>> downloadCallbacks = Collections.synchronizedMap(new HashMap<String, HighLevelProgressCallback<DownloadResult>>());
-
- /** The callback for {@link #getRequests()}. */
- private HighLevelCallback<RequestListResult> requestListCallback;
-
- /**
- * Creates a new high-level client that connects to a node on
- * <code>localhost</code>.
- *
- * @param clientName
- * The name of the client
- */
- public HighLevelClient(String clientName) {
- this.clientName = clientName;
- }
-
- //
- // EVENT MANAGEMENT
- //
-
- /**
- * Adds the given high-level client listener to list of listeners.
- *
- * @param highLevelClientListener
- * The listener to add
- */
- public void addHighLevelClientListener(HighLevelClientListener highLevelClientListener) {
- highLevelClientListeners.add(highLevelClientListener);
- }
-
- /**
- * Removes the given high-level client listener from the list of listeners.
- *
- * @param highLevelClientListener
- * The listener to remove
- */
- public void removeHighLevelClientListener(HighLevelClientListener highLevelClientListener) {
- highLevelClientListeners.remove(highLevelClientListener);
- }
-
- /**
- * Notifies all listeners that a client has connected.
- */
- private void fireClientConnected() {
- for (HighLevelClientListener highLevelClientListener : highLevelClientListeners) {
- highLevelClientListener.clientConnected(this);
- }
- }
-
- /**
- * Notifies all listeners that a client has disconnected.
- *
- * @param throwable
- * The exception that caused the disconnect, or <code>null</code>
- * if there was no exception
- */
- private void fireClientDisconnected(Throwable throwable) {
- for (HighLevelClientListener highLevelClientListener : highLevelClientListeners) {
- highLevelClientListener.clientDisconnected(this, throwable);
- }
- }
-
- /**
- * Adds a high-level progress listener.
- *
- * @param highLevelProgressListener
- * The high-level progress listener to add
- */
- public void addHighLevelProgressListener(HighLevelProgressListener highLevelProgressListener) {
- highLevelProgressListeners.add(highLevelProgressListener);
- }
-
- /**
- * Removes a high-level progress listener.
- *
- * @param highLevelProgressListener
- * The high-level progress listener to remove
- */
- public void removeHighLevelProgressListener(HighLevelProgressListener highLevelProgressListener) {
- highLevelProgressListeners.remove(highLevelProgressListener);
- }
-
- /**
- * Notifies all listeners that the request with the given identifier made
- * some progress.
- *
- * @param identifier
- * The identifier of the request
- * @param highLevelProgress
- * The progress of the request
- */
- private void fireProgressReceived(String identifier, HighLevelProgress highLevelProgress) {
- for (HighLevelProgressListener highLevelProgressListener : highLevelProgressListeners) {
- highLevelProgressListener.progressReceived(this, identifier, highLevelProgress);
- }
- }
-
- //
- // ACCESSORS
- //
-
- /**
- * Returns the FCP connection that backs this high-level client. This method
- * should be used with care as fiddling around with the FCP connection can
- * easily break the high-level client if you don’t know what you’re doing!
- *
- * @return The FCP connection of this client
- */
- public FcpConnection getFcpConnection() {
- return fcpConnection;
- }
-
- /**
- * Returns whether the node is connected.
- *
- * @return <code>true</code> if the node is currently connected,
- * <code>false</code> otherwise
- */
- public boolean isConnected() {
- return fcpConnection != null;
- }
-
- //
- // ACTIONS
- //
-
- /**
- * Connects the client.
- *
- * @param hostname
- * The hostname of the node
- * @return A callback with a connection result
- * @throws UnknownHostException
- * if the hostname can not be resolved
- * @throws IOException
- * if an I/O error occurs communicating with the node
- */
- public HighLevelCallback<ConnectResult> connect(String hostname) throws UnknownHostException, IOException {
- return connect(hostname, 9481);
- }
-
- /**
- * Connects the client.
- *
- * @param hostname
- * The hostname of the node
- * @param port
- * The port number of the node
- * @return A callback with a connection result
- * @throws UnknownHostException
- * if the hostname can not be resolved
- * @throws IOException
- * if an I/O error occurs communicating with the node
- */
- public HighLevelCallback<ConnectResult> connect(String hostname, int port) throws UnknownHostException, IOException {
- return connect(InetAddress.getByName(hostname), port);
- }
-
- /**
- * Connects the client.
- *
- * @param address
- * The address of the node
- * @param port
- * The port number of the node
- * @return A callback with a connection result
- * @throws IOException
- * if an I/O error occurs communicating with the node
- */
- public HighLevelCallback<ConnectResult> connect(InetAddress address, int port) throws IOException {
- try {
- synchronized (this) {
- fcpConnection = new FcpConnection(address, port);
- }
- fcpConnection.addFcpListener(highLevelClientFcpListener);
- fcpConnection.connect();
- ClientHello clientHello = new ClientHello(clientName);
- connectCallback = new HighLevelCallback<ConnectResult>(new ConnectResult());
- fcpConnection.sendMessage(clientHello);
- return connectCallback;
- } catch (IOException ioe1) {
- fcpConnection = null;
- throw ioe1;
- }
- }
-
- /**
- * Disconnects the client from the node.
- */
- public void disconnect() {
- disconnect(null);
- }
-
- /**
- * Generates a new SSK keypair.
- *
- * @return A callback with the keypair
- * @throws IOException
- * if an I/O error occurs communicating with the node
- * @throws HighLevelException
- * if the client is not connected
- */
- public HighLevelCallback<KeyGenerationResult> generateKey() throws IOException, HighLevelException {
- checkConnection();
- String identifier = generateIdentifier("generateSSK");
- GenerateSSK generateSSK = new GenerateSSK(identifier);
- HighLevelCallback<KeyGenerationResult> keyGenerationCallback = new HighLevelCallback<KeyGenerationResult>(new KeyGenerationResult(identifier));
- keyGenerationCallbacks.put(identifier, keyGenerationCallback);
- fcpConnection.sendMessage(generateSSK);
- return keyGenerationCallback;
- }
-
- /**
- * Sets whether to watch the global queue.
- *
- * @param enabled
- * <code>true</code> to watch the global queue in addition to the
- * client-local queue, <code>false</code> to only watch the
- * client-local queue
- * @throws IOException
- * if an I/O error occurs communicating with the node
- * @throws HighLevelException
- * if the client is not connected
- */
- public void setWatchGlobal(boolean enabled) throws IOException, HighLevelException {
- checkConnection();
- WatchGlobal watchGlobal = new WatchGlobal(enabled);
- fcpConnection.sendMessage(watchGlobal);
- }
-
- /**
- * Gets a list of all peers from the node.
- *
- * @return A callback with the peer list
- * @throws IOException
- * if an I/O error occurs with the node
- * @throws HighLevelException
- * if the client is not connected
- */
- public HighLevelCallback<PeerListResult> getPeers() throws IOException, HighLevelException {
- checkConnection();
- String identifier = generateIdentifier("listPeers");
- ListPeers listPeers = new ListPeers(identifier, true, true);
- HighLevelCallback<PeerListResult> peerListCallback = new HighLevelCallback<PeerListResult>(new PeerListResult(identifier));
- peerListCallbacks.put(identifier, peerListCallback);
- fcpConnection.sendMessage(listPeers);
- return peerListCallback;
- }
-
- /**
- * Adds the peer whose noderef is stored in the given file.
- *
- * @param nodeRefFile
- * The name of the file the peer’s noderef is stored in
- * @return A peer callback
- * @throws IOException
- * if an I/O error occurs communicating with the node
- * @throws HighLevelException
- * if the client is not connected
- */
- public HighLevelCallback<PeerResult> addPeer(String nodeRefFile) throws IOException, HighLevelException {
- checkConnection();
- String identifier = generateIdentifier("addPeer");
- AddPeer addPeer = new AddPeer(nodeRefFile);
- HighLevelCallback<PeerResult> peerCallback = new HighLevelCallback<PeerResult>(new PeerResult(identifier));
- peerCallbacks.put(identifier, peerCallback);
- fcpConnection.sendMessage(addPeer);
- return peerCallback;
- }
-
- /**
- * Adds the peer whose noderef is stored in the given file.
- *
- * @param nodeRefURL
- * The URL where the peer’s noderef is stored
- * @return A peer callback
- * @throws IOException
- * if an I/O error occurs communicating with the node
- * @throws HighLevelException
- * if the client is not connected
- */
- public HighLevelCallback<PeerResult> addPeer(URL nodeRefURL) throws IOException, HighLevelException {
- checkConnection();
- String identifier = generateIdentifier("addPeer");
- AddPeer addPeer = new AddPeer(nodeRefURL);
- HighLevelCallback<PeerResult> peerCallback = new HighLevelCallback<PeerResult>(new PeerResult(identifier));
- peerCallbacks.put(identifier, peerCallback);
- fcpConnection.sendMessage(addPeer);
- return peerCallback;
- }
-
- /**
- * Adds the peer whose noderef is stored in the given file.
- *
- * @param nodeRef
- * The peer’s noderef
- * @return A peer callback
- * @throws IOException
- * if an I/O error occurs communicating with the node
- * @throws HighLevelException
- * if the client is not connected
- */
- public HighLevelCallback<PeerResult> addPeer(NodeRef nodeRef) throws IOException, HighLevelException {
- checkConnection();
- String identifier = generateIdentifier("addPeer");
- AddPeer addPeer = new AddPeer(nodeRef);
- HighLevelCallback<PeerResult> peerCallback = new HighLevelCallback<PeerResult>(new PeerResult(identifier));
- peerCallbacks.put(identifier, peerCallback);
- fcpConnection.sendMessage(addPeer);
- return peerCallback;
- }
-
- /**
- * Checks whether direct disk access for the given directory is possible.
- * You have to perform this check before you can upload or download anything
- * from or the disk directly!
- *
- * @param directory
- * The directory to check
- * @param wantRead
- * Whether you want to read the given directory
- * @param wantWrite
- * Whether you want to write to the given directory
- * @return A direct disk access callback
- * @throws IOException
- * if an I/O error occurs communicating with the node
- * @throws HighLevelException
- * if the client is not connected
- */
- public HighLevelCallback<DirectDiskAccessResult> checkDirectDiskAccess(String directory, boolean wantRead, boolean wantWrite) throws IOException, HighLevelException {
- checkConnection();
- TestDDARequest testDDARequest = new TestDDARequest(directory, wantRead, wantWrite);
- HighLevelCallback<DirectDiskAccessResult> directDiskAccessCallback = new HighLevelCallback<DirectDiskAccessResult>(new DirectDiskAccessResult(directory));
- directDiskAccessCallbacks.put(directory, directDiskAccessCallback);
- fcpConnection.sendMessage(testDDARequest);
- return directDiskAccessCallback;
- }
-
- /**
- * Starts a download. Files can either be download to disk or streamed from
- * the node. When downloading to disk you have to perform a direct disk
- * access check for the directory you want to put the downloaded file in!
- *
- * @see #checkDirectDiskAccess(String, boolean, boolean)
- * @param uri
- * The URI to get
- * @param filename
- * The filename to save the data to, or <code>null</code> to
- * retrieve the data as InputStream from the
- * {@link DownloadResult}
- * @param global
- * Whether to put the download on the global queue
- * @return A download result
- * @throws IOException
- * if an I/O error occurs communicating with the node
- * @throws HighLevelException
- * if the client is not connected
- */
- public HighLevelProgressCallback<DownloadResult> download(String uri, String filename, boolean global) throws IOException, HighLevelException {
- checkConnection();
- String identifier = generateIdentifier("download");
- ClientGet clientGet = new ClientGet(uri, identifier, (filename == null) ? ReturnType.direct : ReturnType.disk);
- clientGet.setGlobal(global);
- HighLevelProgressCallback<DownloadResult> downloadCallback = new HighLevelProgressCallback<DownloadResult>(new DownloadResult(identifier));
- downloadCallbacks.put(identifier, downloadCallback);
- fcpConnection.sendMessage(clientGet);
- return downloadCallback;
- }
-
- /**
- * Requests a list of all running requests from the node.
- *
- * @return The request list result
- * @throws IOException
- * if an I/O errors communicating with the node
- * @throws HighLevelException
- * if the client is not connected
- */
- public HighLevelCallback<RequestListResult> getRequests() throws IOException, HighLevelException {
- checkConnection();
- String identifier = generateIdentifier("list-persistent-requests");
- ListPersistentRequests listPersistentRequests = new ListPersistentRequests();
- synchronized (syncObject) {
- if (requestListCallback != null) {
- logger.log(Level.SEVERE, "getRequests() called with request still running!");
- }
- requestListCallback = new HighLevelCallback<RequestListResult>(new RequestListResult(identifier));
- }
- fcpConnection.sendMessage(listPersistentRequests);
- return requestListCallback;
- }
-
- //
- // PRIVATE METHODS
- //
-
- /**
- * Checks whether the client is already connected and throws an exception if
- * it is not.
- *
- * @throws NotConnectedException
- * if the client is not connected
- */
- private void checkConnection() throws NotConnectedException {
- synchronized (this) {
- if (fcpConnection == null) {
- throw new NotConnectedException("client is not connected");
- }
- }
- }
-
- /**
- * Generates an identifier for the given function.
- *
- * @param function
- * The name of the function
- * @return An identifier
- */
- private String generateIdentifier(String function) {
- return "jFCPlib-" + function + "-" + System.currentTimeMillis();
- }
-
- /**
- * Disconnects the client from the node, handing the given Throwable to
- * {@link #fireClientDisconnected(Throwable)}.
- *
- * @param throwable
- * The exception that caused the disconnect, or <code>null</code>
- * if there was no exception
- */
- private void disconnect(Throwable throwable) {
- if (fcpConnection != null) {
- fcpConnection.close();
- }
- fcpConnection = null;
- }
-
- /**
- * FCP listener for {@link HighLevelClient}.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
- private class HighLevelClientFcpListener implements FcpListener {
-
- /** Mapping from directory to written file (for cleanup). */
- private final Map<DirectDiskAccessResult, String> writtenFiles = new HashMap<DirectDiskAccessResult, String>();
-
- /**
- * Creates a new FCP listener for {@link HighLevelClient}.
- */
- HighLevelClientFcpListener() {
- /* do nothing. */
- }
-
- //
- // PRIVATE METHODS
- //
-
- /**
- * Searches all callback collections for a callback with the given
- * identifier and cancels it.
- *
- * @param identifier
- * The identifier to search for, or <code>null</code> to
- * cancel all pending requests
- */
- @SuppressWarnings("synthetic-access")
- private void cancelIdentifier(String identifier) {
- synchronized (syncObject) {
- if (connectCallback != null) {
- connectCallback.getIntermediaryResult().setFailed(true);
- connectCallback.setDone();
- connectCallback = null;
- }
- if (requestListCallback != null) {
- requestListCallback.getIntermediaryResult().setFailed(true);
- requestListCallback.setDone();
- requestListCallback = null;
- }
- }
- if (identifier == null) {
- /* key generation callbacks */
- for (Entry<String, HighLevelCallback<KeyGenerationResult>> keyGenerationEntry : keyGenerationCallbacks.entrySet()) {
- keyGenerationEntry.getValue().getIntermediaryResult().setFailed(true);
- keyGenerationEntry.getValue().setDone();
- }
- keyGenerationCallbacks.clear();
- /* peer list callbacks. */
- for (Entry<String, HighLevelCallback<PeerListResult>> peerListEntry : peerListCallbacks.entrySet()) {
- peerListEntry.getValue().getIntermediaryResult().setFailed(true);
- peerListEntry.getValue().setDone();
- }
- peerListCallbacks.clear();
- /* peer callbacks. */
- for (Entry<String, HighLevelCallback<PeerResult>> peerEntry : peerCallbacks.entrySet()) {
- peerEntry.getValue().getIntermediaryResult().setFailed(true);
- peerEntry.getValue().setDone();
- }
- peerCallbacks.clear();
- /* direct disk access callbacks. */
- for (Entry<String, HighLevelCallback<DirectDiskAccessResult>> directDiskAccessEntry : directDiskAccessCallbacks.entrySet()) {
- directDiskAccessEntry.getValue().getIntermediaryResult().setFailed(true);
- directDiskAccessEntry.getValue().setDone();
- }
- directDiskAccessCallbacks.clear();
- /* download callbacks. */
- for (Entry<String, HighLevelProgressCallback<DownloadResult>> downloadEntry : downloadCallbacks.entrySet()) {
- downloadEntry.getValue().getIntermediaryResult().setFailed(true);
- downloadEntry.getValue().setDone();
- }
- downloadCallbacks.clear();
- } else {
- HighLevelCallback<KeyGenerationResult> keyGenerationCallback = keyGenerationCallbacks.remove(identifier);
- if (keyGenerationCallback != null) {
- keyGenerationCallback.getIntermediaryResult().setFailed(true);
- keyGenerationCallback.setDone();
- return;
- }
- HighLevelCallback<PeerListResult> peerListCallback = peerListCallbacks.remove(identifier);
- if (peerListCallback != null) {
- peerListCallback.getIntermediaryResult().setFailed(true);
- peerListCallback.setDone();
- return;
- }
- HighLevelCallback<PeerResult> peerCallback = peerCallbacks.remove(identifier);
- if (peerCallback != null) {
- peerCallback.getIntermediaryResult().setFailed(true);
- peerCallback.setDone();
- return;
- }
- HighLevelCallback<DirectDiskAccessResult> directDiskAccessCallback = directDiskAccessCallbacks.remove(identifier);
- if (directDiskAccessCallback != null) {
- directDiskAccessCallback.getIntermediaryResult().setFailed(true);
- directDiskAccessCallback.setDone();
- return;
- }
- HighLevelProgressCallback<DownloadResult> downloadCallback = downloadCallbacks.remove(identifier);
- if (downloadCallback != null) {
- downloadCallback.getIntermediaryResult().setFailed(true);
- downloadCallback.setDone();
- return;
- }
- }
- }
-
- /**
- * Reads the given file and returns the first line of the file.
- *
- * @param readFilename
- * The name of the file to read
- * @return The content of the file
- */
- private String readContent(String readFilename) {
- if (readFilename == null) {
- return null;
- }
- FileReader fileReader = null;
- BufferedReader bufferedFileReader = null;
- try {
- fileReader = new FileReader(readFilename);
- bufferedFileReader = new BufferedReader(fileReader);
- String content = bufferedFileReader.readLine();
- return content;
- } catch (IOException ioe1) {
- /* swallow. */
- } finally {
- FcpUtils.close(bufferedFileReader);
- FcpUtils.close(fileReader);
- }
- return null;
- }
-
- /**
- * Writes the given content to the given file.
- *
- * @param directDiskAccessResult
- * The DDA result
- * @param writeFilename
- * The name of the file to write to
- * @param writeContent
- * The content to write to the file
- */
- private void writeContent(DirectDiskAccessResult directDiskAccessResult, String writeFilename, String writeContent) {
- if ((writeFilename == null) || (writeContent == null)) {
- return;
- }
- writtenFiles.put(directDiskAccessResult, writeFilename);
- FileWriter fileWriter = null;
- try {
- fileWriter = new FileWriter(writeFilename);
- fileWriter.write(writeContent);
- } catch (IOException ioe1) {
- /* swallow. */
- } finally {
- FcpUtils.close(fileWriter);
- }
- }
-
- /**
- * Cleans up any files that written for the given result.
- *
- * @param directDiskAccessResult
- * The direct disk access result
- */
- @SuppressWarnings("synthetic-access")
- private void cleanFiles(DirectDiskAccessResult directDiskAccessResult) {
- String writeFilename = writtenFiles.remove(directDiskAccessResult);
- if (writeFilename != null) {
- if (!new File(writeFilename).delete()) {
- logger.warning("could not delete " + writeFilename);
- }
- }
- }
-
- //
- // INTERFACE FcpListener
- //
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#connectionClosed(net.pterodactylus.fcp.FcpConnection,
- * Throwable)
- */
- @SuppressWarnings("synthetic-access")
- public void connectionClosed(FcpConnection fcpConnection, Throwable throwable) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- cancelIdentifier(null);
- disconnect(throwable);
- fireClientDisconnected(throwable);
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedAllData(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.AllData)
- */
- public void receivedAllData(FcpConnection fcpConnection, AllData allData) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedCloseConnectionDuplicateClientName(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.CloseConnectionDuplicateClientName)
- */
- public void receivedCloseConnectionDuplicateClientName(FcpConnection fcpConnection, CloseConnectionDuplicateClientName closeConnectionDuplicateClientName) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedConfigData(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.ConfigData)
- */
- public void receivedConfigData(FcpConnection fcpConnection, ConfigData configData) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedDataFound(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.DataFound)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedDataFound(FcpConnection fcpConnection, DataFound dataFound) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- String identifier = dataFound.getIdentifier();
- HighLevelProgressCallback<DownloadResult> downloadCallback = downloadCallbacks.get(identifier);
- if (downloadCallback != null) {
- DownloadResult downloadResult = downloadCallback.getIntermediaryResult();
- downloadResult.setFinished(true);
- downloadResult.setFailed(false);
- downloadCallback.progressUpdated();
- downloadCallback.setDone();
- }
- HighLevelProgress highLevelProgress = new HighLevelProgress(identifier, true);
- fireProgressReceived(identifier, highLevelProgress);
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedEndListPeerNotes(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.EndListPeerNotes)
- */
- public void receivedEndListPeerNotes(FcpConnection fcpConnection, EndListPeerNotes endListPeerNotes) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedEndListPeers(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.EndListPeers)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedEndListPeers(FcpConnection fcpConnection, EndListPeers endListPeers) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- String identifier = endListPeers.getIdentifier();
- HighLevelCallback<PeerListResult> peerListCallback = peerListCallbacks.remove(identifier);
- if (peerListCallback == null) {
- return;
- }
- peerListCallback.setDone();
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedEndListPersistentRequests(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.EndListPersistentRequests)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedEndListPersistentRequests(FcpConnection fcpConnection, EndListPersistentRequests endListPersistentRequests) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- synchronized (syncObject) {
- if (HighLevelClient.this.requestListCallback == null) {
- logger.log(Level.WARNING, "got EndListPersistentRequests without running request!");
- return;
- }
- requestListCallback.setDone();
- requestListCallback = null;
- }
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedFCPPluginReply(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.FCPPluginReply)
- */
- public void receivedFCPPluginReply(FcpConnection fcpConnection, FCPPluginReply fcpPluginReply) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedGetFailed(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.GetFailed)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedGetFailed(FcpConnection fcpConnection, GetFailed getFailed) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- String identifier = getFailed.getIdentifier();
- HighLevelProgressCallback<DownloadResult> downloadCallback = downloadCallbacks.remove(identifier);
- if (downloadCallback != null) {
- DownloadResult downloadResult = downloadCallback.getIntermediaryResult();
- downloadResult.setFailed(true);
- downloadResult.setFinished(true);
- downloadCallback.setDone();
- return;
- }
- /* unknown identifier? */
- logger.warning("unknown identifier for GetFailed: " + identifier);
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedIdentifierCollision(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.IdentifierCollision)
- */
- public void receivedIdentifierCollision(FcpConnection fcpConnection, IdentifierCollision identifierCollision) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedMessage(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.FcpMessage)
- */
- public void receivedMessage(FcpConnection fcpConnection, FcpMessage fcpMessage) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedNodeData(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.NodeData)
- */
- public void receivedNodeData(FcpConnection fcpConnection, NodeData nodeData) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedNodeHello(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.NodeHello)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedNodeHello(FcpConnection fcpConnection, NodeHello nodeHello) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- synchronized (syncObject) {
- connectCallback.getIntermediaryResult().setFailed(false);
- connectCallback.setDone();
- connectCallback = null;
- }
- fireClientConnected();
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedPeer(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.Peer)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedPeer(FcpConnection fcpConnection, Peer peer) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- String identifier = peer.getIdentifier();
- if (identifier == null) {
- return;
- }
- HighLevelCallback<PeerListResult> peerListCallback = peerListCallbacks.get(identifier);
- if (peerListCallback != null) {
- peerListCallback.getIntermediaryResult().addPeer(peer);
- return;
- }
- HighLevelCallback<PeerResult> peerResult = peerCallbacks.remove(identifier);
- if (peerResult != null) {
- peerResult.getIntermediaryResult().setPeer(peer);
- peerResult.setDone();
- return;
- }
- logger.warning("got Peer message with unknown identifier: " + identifier);
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedPeerNote(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.PeerNote)
- */
- public void receivedPeerNote(FcpConnection fcpConnection, PeerNote peerNote) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedPeerRemoved(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.PeerRemoved)
- */
- public void receivedPeerRemoved(FcpConnection fcpConnection, PeerRemoved peerRemoved) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedPersistentGet(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.PersistentGet)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedPersistentGet(FcpConnection fcpConnection, PersistentGet persistentGet) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- synchronized (syncObject) {
- if (requestListCallback != null) {
- RequestListResult requestListResult = requestListCallback.getIntermediaryResult();
- requestListResult.addRequestResult(new GetRequestResult(persistentGet));
- return;
- }
- }
- String identifier = persistentGet.getIdentifier();
- if (downloadCallbacks.containsKey(identifier)) {
- /* TODO */
- return;
- }
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedPersistentPut(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.PersistentPut)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedPersistentPut(FcpConnection fcpConnection, PersistentPut persistentPut) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- synchronized (syncObject) {
- if (requestListCallback != null) {
- RequestListResult requestListResult = requestListCallback.getIntermediaryResult();
- requestListResult.addRequestResult(new PutRequestResult(persistentPut));
- return;
- }
- }
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedPersistentPutDir(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.PersistentPutDir)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedPersistentPutDir(FcpConnection fcpConnection, PersistentPutDir persistentPutDir) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- synchronized (syncObject) {
- if (requestListCallback != null) {
- RequestListResult requestListResult = requestListCallback.getIntermediaryResult();
- requestListResult.addRequestResult(new PutDirRequestResult(persistentPutDir));
- return;
- }
- }
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedPersistentRequestModified(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.PersistentRequestModified)
- */
- public void receivedPersistentRequestModified(FcpConnection fcpConnection, PersistentRequestModified persistentRequestModified) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedPersistentRequestRemoved(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.PersistentRequestRemoved)
- */
- public void receivedPersistentRequestRemoved(FcpConnection fcpConnection, PersistentRequestRemoved persistentRequestRemoved) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedPluginInfo(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.PluginInfo)
- */
- public void receivedPluginInfo(FcpConnection fcpConnection, PluginInfo pluginInfo) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedProtocolError(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.ProtocolError)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedProtocolError(FcpConnection fcpConnection, ProtocolError protocolError) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- String identifier = protocolError.getIdentifier();
- if (identifier == null) {
- return;
- }
- cancelIdentifier(identifier);
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedPutFailed(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.PutFailed)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedPutFailed(FcpConnection fcpConnection, PutFailed putFailed) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- String identifier = putFailed.getIdentifier();
- HighLevelProgressCallback<DownloadResult> downloadCallback = downloadCallbacks.get(identifier);
- if (downloadCallback != null) {
- DownloadResult downloadResult = downloadCallback.getIntermediaryResult();
- downloadResult.setFailed(true);
- downloadResult.setFinished(true);
- downloadCallback.progressUpdated();
- downloadCallback.setDone();
- }
- /* TODO - check inserts */
- HighLevelProgress highLevelProgress = new HighLevelProgress(identifier, true);
- fireProgressReceived(identifier, highLevelProgress);
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedPutFetchable(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.PutFetchable)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedPutFetchable(FcpConnection fcpConnection, PutFetchable putFetchable) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- String identifier = putFetchable.getIdentifier();
- /* TODO - check inserts */
- HighLevelProgress highLevelProgress = new HighLevelProgress(identifier);
- highLevelProgress.setFetchable(true);
- fireProgressReceived(identifier, highLevelProgress);
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedPutSuccessful(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.PutSuccessful)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedPutSuccessful(FcpConnection fcpConnection, PutSuccessful putSuccessful) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- String identifier = putSuccessful.getIdentifier();
- HighLevelProgressCallback<DownloadResult> downloadCallback = downloadCallbacks.get(identifier);
- if (downloadCallback != null) {
- DownloadResult downloadResult = downloadCallback.getIntermediaryResult();
- downloadResult.setFinished(true);
- downloadResult.setFailed(false);
- downloadCallback.progressUpdated();
- }
- /* TODO - check inserts */
- HighLevelProgress highLevelProgress = new HighLevelProgress(identifier, true);
- fireProgressReceived(identifier, highLevelProgress);
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedSSKKeypair(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.SSKKeypair)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedSSKKeypair(FcpConnection fcpConnection, SSKKeypair sskKeypair) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- HighLevelCallback<KeyGenerationResult> keyGenerationCallback = keyGenerationCallbacks.remove(sskKeypair.getIdentifier());
- if (keyGenerationCallback == null) {
- return;
- }
- KeyGenerationResult keyGenerationResult = keyGenerationCallback.getIntermediaryResult();
- keyGenerationResult.setInsertURI(sskKeypair.getInsertURI());
- keyGenerationResult.setRequestURI(sskKeypair.getRequestURI());
- keyGenerationCallback.setDone();
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedSimpleProgress(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.SimpleProgress)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedSimpleProgress(FcpConnection fcpConnection, SimpleProgress simpleProgress) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- String identifier = simpleProgress.getIdentifier();
- HighLevelProgressCallback<DownloadResult> downloadCallback = downloadCallbacks.get(identifier);
- if (downloadCallback != null) {
- DownloadResult downloadResult = downloadCallback.getIntermediaryResult();
- downloadResult.setTotalBlocks(simpleProgress.getTotal());
- downloadResult.setRequiredBlocks(simpleProgress.getRequired());
- downloadResult.setSuccessfulBlocks(simpleProgress.getSucceeded());
- downloadResult.setFailedBlocks(simpleProgress.getFailed());
- downloadResult.setFatallyFailedBlocks(simpleProgress.getFatallyFailed());
- downloadResult.setTotalFinalized(simpleProgress.isFinalizedTotal());
- downloadCallback.progressUpdated();
- }
- /* TODO - check inserts */
- HighLevelProgress highLevelProgress = new HighLevelProgress(identifier, simpleProgress.getTotal(), simpleProgress.getRequired(), simpleProgress.getSucceeded(), simpleProgress.getFailed(), simpleProgress.getFatallyFailed(), simpleProgress.isFinalizedTotal());
- fireProgressReceived(identifier, highLevelProgress);
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedStartedCompression(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.StartedCompression)
- */
- public void receivedStartedCompression(FcpConnection fcpConnection, StartedCompression startedCompression) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedSubscribedUSKUpdate(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.SubscribedUSKUpdate)
- */
- public void receivedSubscribedUSKUpdate(FcpConnection fcpConnection, SubscribedUSKUpdate subscribedUSKUpdate) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedTestDDAComplete(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.TestDDAComplete)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedTestDDAComplete(FcpConnection fcpConnection, TestDDAComplete testDDAComplete) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- String directory = testDDAComplete.getDirectory();
- if (directory == null) {
- return;
- }
- HighLevelCallback<DirectDiskAccessResult> directDiskAccessCallback = directDiskAccessCallbacks.remove(directory);
- DirectDiskAccessResult directDiskAccessResult = directDiskAccessCallback.getIntermediaryResult();
- cleanFiles(directDiskAccessResult);
- directDiskAccessResult.setReadAllowed(testDDAComplete.isReadDirectoryAllowed());
- directDiskAccessResult.setWriteAllowed(testDDAComplete.isWriteDirectoryAllowed());
- directDiskAccessCallback.setDone();
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedTestDDAReply(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.TestDDAReply)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedTestDDAReply(FcpConnection fcpConnection, TestDDAReply testDDAReply) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- String directory = testDDAReply.getDirectory();
- if (directory == null) {
- return;
- }
- DirectDiskAccessResult directDiskAccessResult = directDiskAccessCallbacks.get(directory).getIntermediaryResult();
- String readFilename = testDDAReply.getReadFilename();
- String readContent = readContent(readFilename);
- String writeFilename = testDDAReply.getWriteFilename();
- String writeContent = testDDAReply.getContentToWrite();
- writeContent(directDiskAccessResult, writeFilename, writeContent);
- TestDDAResponse testDDAResponse = new TestDDAResponse(directory, readContent);
- try {
- fcpConnection.sendMessage(testDDAResponse);
- } catch (IOException e) {
- /* swallow. I’m verry unhappy about this. */
- }
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedURIGenerated(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.URIGenerated)
- */
- @SuppressWarnings("synthetic-access")
- public void receivedURIGenerated(FcpConnection fcpConnection, URIGenerated uriGenerated) {
- if (fcpConnection != HighLevelClient.this.fcpConnection) {
- return;
- }
- String identifier = uriGenerated.getIdentifier();
- /* TODO - check inserts */
- HighLevelProgress highLevelProgress = new HighLevelProgress(identifier, uriGenerated.getURI());
- fireProgressReceived(identifier, highLevelProgress);
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedUnknownNodeIdentifier(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.UnknownNodeIdentifier)
- */
- public void receivedUnknownNodeIdentifier(FcpConnection fcpConnection, UnknownNodeIdentifier unknownNodeIdentifier) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receivedUnknownPeerNoteType(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.UnknownPeerNoteType)
- */
- public void receivedUnknownPeerNoteType(FcpConnection fcpConnection, UnknownPeerNoteType unknownPeerNoteType) {
- /* TODO */
- }
-
- /**
- * @see net.pterodactylus.fcp.FcpListener#receviedFinishedCompression(net.pterodactylus.fcp.FcpConnection,
- * net.pterodactylus.fcp.FinishedCompression)
- */
- public void receviedFinishedCompression(FcpConnection fcpConnection, FinishedCompression finishedCompression) {
- /* TODO */
- }
-
- }
-
-}
+++ /dev/null
-/*
- * jFCPlib-high-level-client - HighLevelClientListener.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-import java.util.EventListener;
-
-/**
- * Interface for objects that want to be notified on certain high-level client
- * events.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public interface HighLevelClientListener extends EventListener {
-
- /**
- * Notifies a listener that the given high-level client was connected to the
- * node.
- *
- * @param highLevelClient
- * The client that was connected
- */
- public void clientConnected(HighLevelClient highLevelClient);
-
- /**
- * Notifies a listener that the given client was disconnected from the node.
- *
- * @param highLevelClient
- * The client that was disconnected
- * @param throwable
- * The exception that caused the disconnect, or <code>null</code>
- * if no exception occured
- */
- public void clientDisconnected(HighLevelClient highLevelClient, Throwable throwable);
-
-}
+++ /dev/null
-/**
- *
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-/**
- * Base exception for high-level client exceptions.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class HighLevelException extends Exception {
-
- /**
- * Creates a new high-level client exception.
- */
- public HighLevelException() {
- super();
- }
-
- /**
- * Creates a new high-level client exception with the given message.
- *
- * @param message
- * The message of the exception
- */
- public HighLevelException(String message) {
- super(message);
- }
-
- /**
- * Creates a new high-level client exception with the given cause.
- *
- * @param cause
- * The cause of the exception
- */
- public HighLevelException(Throwable cause) {
- super(cause);
- }
-
- /**
- * Creates a new high-level client exception with the given message and
- * cause.
- *
- * @param message
- * The message of the exception
- * @param cause
- * The cause of the exception
- */
- public HighLevelException(String message, Throwable cause) {
- super(message, cause);
- }
-
-}
+++ /dev/null
-/*
- * jFCPlib-high-level-client - HighLevelContinuosResult.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-/**
- * Result for operations that send progress messages until they have completed.
- * The fields of the progress message has to be checked in given order because
- * if you receive this progress asynchronously via a
- * {@link HighLevelProgressListener} the progress will not have any state, you
- * will simply get the latest results, with other fields unset. First you should
- * check whether {@link #isFinished()} returns <code>true</code>. If it does,
- * the request is finished and {@link #isFailed()} will tell you whether the
- * request has failed or succeeded. Other fields are not set. If the request is
- * not yet finished, {@link #isFetchable()} will tell you whether the request
- * has progressed to a state that allows other clients to fetch the inserted
- * data. This is of course only valid for Put and PutDir requests. Alternatively
- * {@link #getURI()} can return a non-<code>null</code> value which signals
- * that the request generated a URI. If none of those methods return
- * <code>true</code>, you can use the block count methods to get detailed
- * progress statistics. When progress you received is a {@link DownloadResult}
- * you do not need to check
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class HighLevelProgress extends HighLevelResult {
-
- /** Whether the request is finished. */
- private boolean finished;
-
- /** Whether a Put request should be fetchable now. */
- private boolean fetchable;
-
- /** The generated URI, in case of a Put request. */
- private String uri;
-
- /** The number of total blocks. */
- private int totalBlocks;
-
- /** The number of required blocks. */
- private int requiredBlocks;
-
- /** The number of successfully transferred blocks. */
- private int successfulBlocks;
-
- /** The number of failed blocks. */
- private int failedBlocks;
-
- /** The number of fatally failed blocks. */
- private int fatallyFailedBlocks;
-
- /** Whether the total number is finalized. */
- private boolean totalFinalized;
-
- /**
- * Package-private constructor.
- *
- * @param identifier
- * The identifier of the request
- */
- public HighLevelProgress(String identifier) {
- super(identifier);
- }
-
- /**
- * Creates a new high-level progress for a request that is finished.
- *
- * @param identifier
- * The identifier of the request
- * @param successful
- * <code>true</code> if the request finished successfully,
- * <code>false</code> otherwise
- */
- public HighLevelProgress(String identifier, boolean successful) {
- this(identifier);
- finished = true;
- setFailed(!successful);
- }
-
- /**
- * Creates a new high-level progress for a Put or PutDir request that
- * generated a URI.
- *
- * @param identifier
- * The identifier of the request
- * @param uri
- * The URI of the request
- */
- public HighLevelProgress(String identifier, String uri) {
- this(identifier);
- this.uri = uri;
- }
-
- /**
- * Creates a new high-level progress with the given values.
- *
- * @param identifier
- * The identifier of the request
- * @param totalBlocks
- * The total number of blocks
- * @param requiredBlocks
- * The number of required blocks
- * @param successfulBlocks
- * The number of successful blocks
- * @param failedBlocks
- * The number of failed blocks
- * @param fatallyFailedBlocks
- * The number of fatally failed blocks
- * @param totalFinalized
- * <code>true</code> if the total number of blocks is
- * finalized, <code>false</code> otherwise
- */
- public HighLevelProgress(String identifier, int totalBlocks, int requiredBlocks, int successfulBlocks, int failedBlocks, int fatallyFailedBlocks, boolean totalFinalized) {
- this(identifier);
- this.totalBlocks = totalBlocks;
- this.requiredBlocks = requiredBlocks;
- this.successfulBlocks = successfulBlocks;
- this.failedBlocks = failedBlocks;
- this.fatallyFailedBlocks = fatallyFailedBlocks;
- this.totalFinalized = totalFinalized;
- }
-
- /**
- * Returns whether this progress means that a request has finished. Use
- * {@link #isFailed()} to check if the request failed.
- *
- * @see #isFailed()
- * @return <code>true</code> if the request has finished
- */
- public boolean isFinished() {
- return finished;
- }
-
- /**
- * Sets whether the request described by this progress has finished.
- *
- * @param finished
- * <code>true</code> if the request has finished,
- * <code>false</code> otherwise
- */
- void setFinished(boolean finished) {
- this.finished = finished;
- }
-
- /**
- * Returns whether the request should be fetchable now, in case it was a Put
- * request.
- *
- * @return <code>true</code> if the request should be fetchable now,
- * <code>false</code> otherwise
- */
- public boolean isFetchable() {
- return fetchable;
- }
-
- /**
- * Sets whether the request should be fetchable now, in case it was a Put
- * request.
- *
- * @param fetchable
- * <code>true</code> if the request should be fetchable now,
- * <code>false</code> otherwise
- */
- void setFetchable(boolean fetchable) {
- this.fetchable = fetchable;
- }
-
- /**
- * Returns the URI that was generated by the request. Of course only Put and
- * PutDir requests will generated URIs.
- *
- * @return The generated URI
- */
- public String getURI() {
- return uri;
- }
-
- /**
- * Sets the URI generated by the request.
- *
- * @param uri
- * The generated URI
- */
- void setURI(String uri) {
- this.uri = uri;
- }
-
- /**
- * Returns the number of total blocks.
- *
- * @return The number of total blocks
- */
- public int getTotalBlocks() {
- return totalBlocks;
- }
-
- /**
- * Sets the number of total blocks.
- *
- * @param totalBlocks
- * The number of total blocks
- */
- void setTotalBlocks(int totalBlocks) {
- this.totalBlocks = totalBlocks;
- }
-
- /**
- * Returns the number of required blocks. For downloads, this number is
- * smaller than {@link #getTotalBlocks()}.
- *
- * @return The number of required blocks
- */
- public int getRequiredBlocks() {
- return requiredBlocks;
- }
-
- /**
- * Sets the number of required blocks.
- *
- * @param requiredBlocks
- * The number of required blocks
- */
- void setRequiredBlocks(int requiredBlocks) {
- this.requiredBlocks = requiredBlocks;
- }
-
- /**
- * Returns the number of successfully transferred blocks.
- *
- * @return The number of successfully transferred blocks
- */
- public int getSuccessfulBlocks() {
- return successfulBlocks;
- }
-
- /**
- * Sets the number of successfully transferred blocks.
- *
- * @param successfulBlocks
- * The number of successfully transferred blocks
- */
- void setSuccessfulBlocks(int successfulBlocks) {
- this.successfulBlocks = successfulBlocks;
- }
-
- /**
- * Returns the number of failed blocks. Blocks that have failed can be
- * retried.
- *
- * @return The number of failed blocks
- */
- public int getFailedBlocks() {
- return failedBlocks;
- }
-
- /**
- * Sets the number of failed blocks.
- *
- * @param failedBlocks
- * The number of failed blocks
- */
- void setFailedBlocks(int failedBlocks) {
- this.failedBlocks = failedBlocks;
- }
-
- /**
- * Returns the number of fatally failed blocks. Fatally failed blocks will
- * never complete, even with endless retries.
- *
- * @return The number of fatally failed blocks
- */
- public int getFatallyFailedBlocks() {
- return fatallyFailedBlocks;
- }
-
- /**
- * Sets the number of fatally failed blocks.
- *
- * @param fatallyFailedBlocks
- * The number fatally failed blocks
- */
- void setFatallyFailedBlocks(int fatallyFailedBlocks) {
- this.fatallyFailedBlocks = fatallyFailedBlocks;
- }
-
- /**
- * Returns whether the result of {@link #getTotalBlocks()} is final, i.e. it
- * won’t change anymore.
- *
- * @return <code>true</code> if the result of {@link #getTotalBlocks()} is
- * final, <code>false</code> otherwise
- */
- public boolean isTotalFinalized() {
- return totalFinalized;
- }
-
- /**
- * Sets whether the result of {@link #getTotalBlocks()} is final, i.e. it
- * won’t change anymore.
- *
- * @param totalFinalized
- * <code>true</code> if the result of {@link #getTotalBlocks()}
- * is final, <code>false</code> otherwise
- */
- void setTotalFinalized(boolean totalFinalized) {
- this.totalFinalized = totalFinalized;
- }
-
-}
+++ /dev/null
-/*
- * jFCPlib-high-level-client - HighLevelContinousCallback.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Callback for an operation that sends progress messages before completion.
- *
- * @param
- * <P>
- * The type of the high-level progress
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class HighLevelProgressCallback<P extends HighLevelProgress> extends HighLevelCallback<P> {
-
- /** Callback listeners. */
- private final List<HighLevelProgressCallbackListener<P>> highLevelContinuousCallbackListeners = new ArrayList<HighLevelProgressCallbackListener<P>>();
-
- /**
- * Creates a new continuous callback with the given result.
- *
- * @see HighLevelCallback#HighLevelCallback(HighLevelResult)
- * @param progress
- * The result of the operation
- */
- HighLevelProgressCallback(P progress) {
- super(progress);
- }
-
- //
- // EVENT MANAGEMENT
- //
-
- /**
- * Adds a callback listener to this callback.
- *
- * @param highLevelContinuousCallbackListener
- * The callback listener to add
- */
- public void addHighLevelContinuousCallbackListener(HighLevelProgressCallbackListener<P> highLevelContinuousCallbackListener) {
- highLevelContinuousCallbackListeners.add(highLevelContinuousCallbackListener);
- fireGotProgress();
- }
-
- /**
- * Removes a callback listener from this callback.
- *
- * @param highLevelContinuousCallbackListener
- * The callback listener to remove
- */
- public void removeHighLevelContinuousCallbackListener(HighLevelProgressCallbackListener<P> highLevelContinuousCallbackListener) {
- highLevelContinuousCallbackListeners.remove(highLevelContinuousCallbackListener);
- }
-
- /**
- * Notifies all listeners that progress results have been received.
- */
- private void fireGotProgress() {
- for (HighLevelProgressCallbackListener<P> highLevelContinuousCallbackListener: highLevelContinuousCallbackListeners) {
- highLevelContinuousCallbackListener.gotProgress(this);
- }
- }
-
- //
- // ACCESSORS
- //
-
- /**
- * Waits for the next progress on this callback. Completion of the result
- * also counts as progress.
- *
- * @throws InterruptedException
- * if {@link Object#wait()} is interrupted
- */
- public void waitForProgress() throws InterruptedException {
- synchronized (syncObject) {
- syncObject.wait();
- }
- }
-
- /**
- * Waits for the given amount of time (in milliseconds) for the next
- * progress on this callback. Completion of the result also counts as
- * progress.
- *
- * @param waitTime
- * The maximum time to wait for progress
- * @throws InterruptedException
- * if {@link Object#wait()} is interrupted
- */
- public void waitForProgress(long waitTime) throws InterruptedException {
- synchronized (syncObject) {
- syncObject.wait(waitTime);
- }
- }
-
- /**
- * Notifies all listeners that the progress was updated.
- */
- void progressUpdated() {
- synchronized (syncObject) {
- syncObject.notify();
- }
- fireGotProgress();
- }
-
-}
+++ /dev/null
-/*
- * jFCPlib-high-level-client - HighLevelContinuousCallbackListener.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-/**
- * Interface for objects that want to be notified as soon as a lengthy operation
- * made some progress.
- *
- * @param
- * <P>
- * The type of the high-level progress
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- * @version $Id: HighLevelContinuousCallbackListener.java 29 2008-04-15
- * 23:15:49Z bombe $
- */
-public interface HighLevelProgressCallbackListener<P extends HighLevelProgress> extends HighLevelCallbackListener<P> {
-
- /**
- * Notifies a listener that a progress message has been received.
- *
- * @param highLevelContinuousCallback
- * The callback that made the progress
- */
- public void gotProgress(HighLevelProgressCallback<P> highLevelContinuousCallback);
-
-}
+++ /dev/null
-/*
- * jFCPlib-high-level-client - HighLevelProgressListener.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-import java.util.EventListener;
-
-/**
- * Interface for objects that want to observe the progression of requests.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public interface HighLevelProgressListener extends EventListener {
-
- /**
- * Notifies a listener that the request with the given identifier has made
- * some progress.
- *
- * @param highLevelClient
- * The high-level client that emitted this event
- * @param identifier
- * The identifier of the request
- * @param highLevelProgress
- * The progress of the request
- */
- public void progressReceived(HighLevelClient highLevelClient, String identifier, HighLevelProgress highLevelProgress);
-
-}
+++ /dev/null
-/*
- * fcplib - HighLevelResult.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-/**
- * Base class for results of {@link HighLevelClient} operations.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public abstract class HighLevelResult {
-
- /** The identifier of the request. */
- private final String identifier;
-
- /** Whether the operation failed. */
- private boolean failed;
-
- /**
- * Package-private constructor.
- *
- * @param identifier
- * The identifier of the request
- */
- HighLevelResult(String identifier) {
- this.identifier = identifier;
- }
-
- /**
- * Returns the identifier of the underlying request.
- *
- * @return The identifier of the request
- */
- public String getIdentifier() {
- return identifier;
- }
-
- /**
- * Returns whether the operation failed.
- *
- * @return <code>true</code> if the operation failed, <code>false</code>
- * otherwise
- */
- public boolean isFailed() {
- return failed;
- }
-
- /**
- * Sets whether the operation failed.
- *
- * @param failed
- * <code>true</code> if the operation failed,
- * <code>false</code> otherwise
- */
- void setFailed(boolean failed) {
- this.failed = failed;
- }
-
-}
+++ /dev/null
-/*
- * jFCPlib-high-level-client - KeyGenerationResult.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-/**
- * Result of a {@link HighLevelClient#generateKey()} operation.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class KeyGenerationResult extends HighLevelResult {
-
- /** The insert URI. */
- private String insertURI;
-
- /** The request URI. */
- private String requestURI;
-
- /**
- * Package-private constructor.
- *
- * @param identifier
- * The identifier of the request
- */
- KeyGenerationResult(String identifier) {
- super(identifier);
- }
-
- /**
- * Returns the insert URI.
- *
- * @return The insert URI
- */
- public String getInsertURI() {
- return insertURI;
- }
-
- /**
- * Sets the insert URI.
- *
- * @param insertURI
- * The insert URI
- */
- void setInsertURI(String insertURI) {
- this.insertURI = insertURI;
- }
-
- /**
- * Returns the request URI.
- *
- * @return The request URI
- */
- public String getRequestURI() {
- return requestURI;
- }
-
- /**
- * Sets the request URI.
- *
- * @param requestURI
- * The request URI
- */
- void setRequestURI(String requestURI) {
- this.requestURI = requestURI;
- }
-
-}
+++ /dev/null
-/**
- *
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-/**
- * Exception that is thrown when an operation is tried on a not connected
- * connection.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class NotConnectedException extends HighLevelException {
-
- /**
- * Creates a new not-connected exception.
- */
- public NotConnectedException() {
- super();
- }
-
- /**
- * Creates a new not-connected exception with the given message.
- *
- * @param message
- * The message of the exception
- */
- public NotConnectedException(String message) {
- super(message);
- }
-
- /**
- * Creates a new not-connected exception with the given cause.
- *
- * @param cause
- * The cause of the exception
- */
- public NotConnectedException(Throwable cause) {
- super(cause);
- }
-
- /**
- * Creates a new not-connected exception with the given message and cause.
- *
- * @param message
- * The message of the exception
- * @param cause
- * The cause of the exception
- */
- public NotConnectedException(String message, Throwable cause) {
- super(message, cause);
- }
-
-}
+++ /dev/null
-/*
- * jFCPlib-high-level-client - PeerListResult.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import net.pterodactylus.fcp.Peer;
-
-/**
- * The result of a {@link HighLevelClient#getPeers()} operation.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class PeerListResult extends HighLevelResult implements Iterable<Peer> {
-
- /** The list of peers. */
- private final List<Peer> peers = new ArrayList<Peer>();
-
- /**
- * Package-private constructor.
- *
- * @param identifier
- * The identifier of the request
- */
- PeerListResult(String identifier) {
- super(identifier);
- }
-
- /**
- * Adds a peer to the list.
- *
- * @param peer
- * The peer to add
- */
- void addPeer(Peer peer) {
- peers.add(peer);
- }
-
- /**
- * {@inheritDoc}
- */
- public Iterator<Peer> iterator() {
- return peers.iterator();
- }
-
- /**
- * Returns the peer at the given index.
- *
- * @param index
- * The index of the peer
- * @return The peer
- * @see java.util.List#get(int)
- */
- public Peer get(int index) {
- return peers.get(index);
- }
-
- /**
- * Returns the size of the peer list.
- *
- * @return The size of the peer list
- * @see java.util.List#size()
- */
- public int size() {
- return peers.size();
- }
-
-}
+++ /dev/null
-/*
- * jFCPlib-high-level-client - PeerResult.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-import net.pterodactylus.fcp.Peer;
-
-/**
- * The peer result is the result of several operations:
- * {@link HighLevelClient#addPeer(String)},
- * {@link HighLevelClient#addPeer(java.net.URL)}, or
- * {@link HighLevelClient#addPeer(net.pterodactylus.fcp.NodeRef)}.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class PeerResult extends HighLevelResult {
-
- /** The peer. */
- private Peer peer;
-
- /**
- * Package-private constructor.
- *
- * @param identifier
- * The identifier of the request
- */
- PeerResult(String identifier) {
- super(identifier);
- }
-
- /**
- * Returns the peer.
- *
- * @return The peer
- */
- public Peer getPeer() {
- return peer;
- }
-
- /**
- * Sets the peer.
- *
- * @param peer
- * The peer
- */
- void setPeer(Peer peer) {
- this.peer = peer;
- }
-
-}
+++ /dev/null
-/*
- * jFCPlib-high-level-client - PutDirRequestResult.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-import net.pterodactylus.fcp.PersistentPutDir;
-import net.pterodactylus.fcp.Priority;
-import net.pterodactylus.fcp.UploadFrom;
-import net.pterodactylus.fcp.Verbosity;
-
-/**
- * A PutDir request result is generated by {@link HighLevelClient#getRequests()}.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class PutDirRequestResult extends RequestResult {
-
- /** The wrapped PersistentPutDir FCP message. */
- private final PersistentPutDir persistentPutDir;
-
- /**
- * Creates a new PutDir request result.
- *
- * @param persistentPutDir
- * The PersistentPutDir FCP message to wrap
- */
- public PutDirRequestResult(PersistentPutDir persistentPutDir) {
- super(persistentPutDir.getIdentifier());
- this.persistentPutDir = persistentPutDir;
- }
-
- /**
- * Returns the number of files in the request.
- *
- * @return The number of files
- * @see net.pterodactylus.fcp.PersistentPutDir#getFileCount()
- */
- public int getFileCount() {
- return persistentPutDir.getFileCount();
- }
-
- /**
- * Returns the length of the file at the given index.
- *
- * @param fileIndex
- * The index of the file
- * @return The length of the file
- * @see net.pterodactylus.fcp.PersistentPutDir#getFileDataLength(int)
- */
- public long getFileDataLength(int fileIndex) {
- return persistentPutDir.getFileDataLength(fileIndex);
- }
-
- /**
- * Returns the name of the file at the given index.
- *
- * @param fileIndex
- * The index of the file
- * @return The name of the file
- * @see net.pterodactylus.fcp.PersistentPutDir#getFileFilename(int)
- */
- public String getFileFilename(int fileIndex) {
- return persistentPutDir.getFileFilename(fileIndex);
- }
-
- /**
- * Returns the content type of the file at the given index.
- *
- * @param fileIndex
- * The index of the file
- * @return The content type of the file
- * @see net.pterodactylus.fcp.PersistentPutDir#getFileMetadataContentType(int)
- */
- public String getFileMetadataContentType(int fileIndex) {
- return persistentPutDir.getFileMetadataContentType(fileIndex);
- }
-
- /**
- * Returns the name of the file at the given index.
- *
- * @param fileIndex
- * The index of the file
- * @return The name of the file
- * @see net.pterodactylus.fcp.PersistentPutDir#getFileName(int)
- */
- public String getFileName(int fileIndex) {
- return persistentPutDir.getFileName(fileIndex);
- }
-
- /**
- * Returns the upload source of the file at the given index.
- *
- * @param fileIndex
- * The index of the file
- * @return The upload source of the file
- * @see net.pterodactylus.fcp.PersistentPutDir#getFileUploadFrom(int)
- */
- public UploadFrom getFileUploadFrom(int fileIndex) {
- return persistentPutDir.getFileUploadFrom(fileIndex);
- }
-
- /**
- * Returns the maximum number of retries for failed blocks.
- *
- * @return The maximum number of retries
- * @see net.pterodactylus.fcp.PersistentPutDir#getMaxRetries()
- */
- public int getMaxRetries() {
- return persistentPutDir.getMaxRetries();
- }
-
- /**
- * Returns the priority of the request.
- *
- * @return The priority
- * @see net.pterodactylus.fcp.PersistentPutDir#getPriority()
- */
- public Priority getPriority() {
- return persistentPutDir.getPriority();
- }
-
- /**
- * Returns the URI of the request.
- *
- * @return The URI of the request
- * @see net.pterodactylus.fcp.PersistentPutDir#getURI()
- */
- public String getURI() {
- return persistentPutDir.getURI();
- }
-
- /**
- * Returns the verbosity of the request.
- *
- * @return The verbosity
- * @see net.pterodactylus.fcp.PersistentPutDir#getVerbosity()
- */
- public Verbosity getVerbosity() {
- return persistentPutDir.getVerbosity();
- }
-
- /**
- * Returns whether the request is on the global queue.
- *
- * @return <code>true</code> if the request is on the global queue,
- * <code>false</code> if it is on the client-local queue
- * @see net.pterodactylus.fcp.PersistentPutDir#isGlobal()
- */
- public boolean isGlobal() {
- return persistentPutDir.isGlobal();
- }
-
-}
+++ /dev/null
-/*
- * jFCPlib-high-level-client - PutRequestResult.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-import net.pterodactylus.fcp.Persistence;
-import net.pterodactylus.fcp.PersistentPut;
-import net.pterodactylus.fcp.Priority;
-import net.pterodactylus.fcp.UploadFrom;
-import net.pterodactylus.fcp.Verbosity;
-
-/**
- * A put request result will be contained in a {@link RequestListResult}.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class PutRequestResult extends RequestResult {
-
- /** The wrapped PersistentPut FCP message. */
- private final PersistentPut persistentPut;
-
- /**
- * Creates a new put request result.
- *
- * @param persistentPut
- * The PersistentPut FCP message to wrap
- */
- public PutRequestResult(PersistentPut persistentPut) {
- super(persistentPut.getIdentifier());
- this.persistentPut = persistentPut;
- }
-
- /**
- * Returns the client token associated with the request.
- *
- * @return The client token
- * @see net.pterodactylus.fcp.PersistentPut#getClientToken()
- */
- public String getClientToken() {
- return persistentPut.getClientToken();
- }
-
- /**
- * Returns the length of the data to be inserted.
- *
- * @return The length of the data
- * @see net.pterodactylus.fcp.PersistentPut#getDataLength()
- */
- public long getDataLength() {
- return persistentPut.getDataLength();
- }
-
- /**
- * Returns the maximum number of retries for failed blocks.
- *
- * @return The maximum number of retries
- * @see net.pterodactylus.fcp.PersistentPut#getMaxRetries()
- */
- public int getMaxRetries() {
- return persistentPut.getMaxRetries();
- }
-
- /**
- * Returns the content type of the data.
- *
- * @return The content type of the data
- * @see net.pterodactylus.fcp.PersistentPut#getMetadataContentType()
- */
- public String getMetadataContentType() {
- return persistentPut.getMetadataContentType();
- }
-
- /**
- * Returns the persistence level of the request.
- *
- * @return The persistence level
- * @see net.pterodactylus.fcp.PersistentPut#getPersistence()
- */
- public Persistence getPersistence() {
- return persistentPut.getPersistence();
- }
-
- /**
- * Returns the priority of the request.
- *
- * @return The priority
- * @see net.pterodactylus.fcp.PersistentPut#getPriority()
- */
- public Priority getPriority() {
- return persistentPut.getPriority();
- }
-
- /**
- * Returns the target filename of the request
- *
- * @return The target filename
- * @see net.pterodactylus.fcp.PersistentPut#getTargetFilename()
- */
- public String getTargetFilename() {
- return persistentPut.getTargetFilename();
- }
-
- /**
- * Returns the upload source of the request.
- *
- * @return The upload source
- * @see net.pterodactylus.fcp.PersistentPut#getUploadFrom()
- */
- public UploadFrom getUploadFrom() {
- return persistentPut.getUploadFrom();
- }
-
- /**
- * Returns the URI of the request.
- *
- * @return The URI
- * @see net.pterodactylus.fcp.PersistentPut#getURI()
- */
- public String getURI() {
- return persistentPut.getURI();
- }
-
- /**
- * Returns the verbosity of the request.
- *
- * @return The verbosity
- * @see net.pterodactylus.fcp.PersistentPut#getVerbosity()
- */
- public Verbosity getVerbosity() {
- return persistentPut.getVerbosity();
- }
-
- /**
- * Returns whether the request is on the global queue.
- *
- * @return <code>true</code> if the request is on the global queue,
- * <code>false</code> if it is on the client-local queue
- * @see net.pterodactylus.fcp.PersistentPut#isGlobal()
- */
- public boolean isGlobal() {
- return persistentPut.isGlobal();
- }
-
- /**
- * Returns whether the request has already started.
- *
- * @return <code>true</code> if the request has started,
- * <code>false</code> otherwise
- * @see net.pterodactylus.fcp.PersistentPut#isStarted()
- */
- public boolean isStarted() {
- return persistentPut.isStarted();
- }
-
-}
+++ /dev/null
-/*
- * jFCPlib-high-level-client - RequestListResult.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * The request list results lists all currently running requests on a node.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class RequestListResult extends HighLevelResult implements Iterable<RequestResult> {
-
- /** The request results. */
- private List<RequestResult> requestResults = Collections.synchronizedList(new ArrayList<RequestResult>());
-
- /**
- * Creates a new request list result.
- *
- * @param identifier
- * The identifier of the request
- */
- RequestListResult(String identifier) {
- super(identifier);
- }
-
- /**
- * Adds a request result.
- *
- * @param requestResult
- * The request result to add
- */
- void addRequestResult(RequestResult requestResult) {
- requestResults.add(requestResult);
- }
-
- /**
- * {@inheritDoc}
- */
- public Iterator<RequestResult> iterator() {
- return requestResults.iterator();
- }
-
- /**
- * Returns the request result at the given index.
- *
- * @param index
- * The index of the request result
- * @return The request result
- */
- public RequestResult get(int index) {
- return requestResults.get(index);
- }
-
- /**
- * Returns the number of request results in this request list.
- *
- * @return The number of request results
- */
- public int size() {
- return requestResults.size();
- }
-
-}
+++ /dev/null
-/*
- * jFCPlib-high-level-client - RequestResult.java -
- * Copyright © 2008 David Roden
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-package net.pterodactylus.fcp.highlevel;
-
-/**
- * A request result is the result of different operations, e.g.
- * {@link HighLevelClient#getRequests()}.
- *
- * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- */
-public class RequestResult extends HighLevelResult {
-
- /**
- * Creates a new request result.
- *
- * @param identifier
- * The identifier of the request
- */
- RequestResult(String identifier) {
- super(identifier);
- }
-
-}
+++ /dev/null
-/**
- * This package contains the high-level client API.
- */
-
-package net.pterodactylus.fcp.highlevel;
\ No newline at end of file