From c1710356b299b5d3eebd019e69e370ac6f7b81b5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Mon, 12 May 2008 22:10:31 +0000 Subject: [PATCH] add listener for progress events make high-level progress non-abstract git-svn-id: http://trooper/svn/projects/jFCPlib/branch/high-level-client@857 c3eda9e8-030b-0410-8277-bc7414b0a119 --- .../fcp/highlevel/HighLevelClient.java | 42 ++++++++++++++++++++- .../fcp/highlevel/HighLevelProgress.java | 31 +++++++++++++++- .../fcp/highlevel/HighLevelProgressListener.java | 43 ++++++++++++++++++++++ 3 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 src/net/pterodactylus/fcp/highlevel/HighLevelProgressListener.java diff --git a/src/net/pterodactylus/fcp/highlevel/HighLevelClient.java b/src/net/pterodactylus/fcp/highlevel/HighLevelClient.java index 1521703..a09b289 100644 --- a/src/net/pterodactylus/fcp/highlevel/HighLevelClient.java +++ b/src/net/pterodactylus/fcp/highlevel/HighLevelClient.java @@ -120,6 +120,9 @@ public class HighLevelClient { /** The listener for the connection. */ private HighLevelClientFcpListener highLevelClientFcpListener = new HighLevelClientFcpListener(); + /** The listeners for progress events. */ + private List highLevelProgressListeners = Collections.synchronizedList(new ArrayList()); + /** The callback for {@link #connect()}. */ private HighLevelCallback connectCallback; @@ -249,6 +252,41 @@ public class HighLevelClient { } } + /** + * 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(identifier, highLevelProgress); + } + } + // // ACCESSORS // @@ -1035,8 +1073,8 @@ public class HighLevelClient { downloadCallback.progressUpdated(); return; } - /* unknown identifier? */ - logger.warning("unknown identifier for SimpleProgress: " + identifier); + HighLevelProgress highLevelProgress = new HighLevelProgress(identifier, simpleProgress.getTotal(), simpleProgress.getRequired(), simpleProgress.getSucceeded(), simpleProgress.getFailed(), simpleProgress.getFatallyFailed(), simpleProgress.isFinalizedTotal()); + fireProgressReceived(identifier, highLevelProgress); } /** diff --git a/src/net/pterodactylus/fcp/highlevel/HighLevelProgress.java b/src/net/pterodactylus/fcp/highlevel/HighLevelProgress.java index ec648f8..675b950 100644 --- a/src/net/pterodactylus/fcp/highlevel/HighLevelProgress.java +++ b/src/net/pterodactylus/fcp/highlevel/HighLevelProgress.java @@ -25,7 +25,7 @@ package net.pterodactylus.fcp.highlevel; * @author David ‘Bombe’ Roden <bombe@freenetproject.org> * @version $Id$ */ -public abstract class HighLevelProgress extends HighLevelResult { +public class HighLevelProgress extends HighLevelResult { /** The number of total blocks. */ private int totalBlocks; @@ -56,6 +56,35 @@ public abstract class HighLevelProgress extends HighLevelResult { } /** + * 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 + * true if the total number of blocks is + * finalized, false 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 the number of total blocks. * * @return The number of total blocks diff --git a/src/net/pterodactylus/fcp/highlevel/HighLevelProgressListener.java b/src/net/pterodactylus/fcp/highlevel/HighLevelProgressListener.java new file mode 100644 index 0000000..926ea32 --- /dev/null +++ b/src/net/pterodactylus/fcp/highlevel/HighLevelProgressListener.java @@ -0,0 +1,43 @@ +/* + * 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> + * @version $Id$ + */ +public interface HighLevelProgressListener extends EventListener { + + /** + * Notifies a listener that the request with the given identifier has made + * some progress. + * + * @param identifier + * The identifier of the request + * @param highLevelProgress + * The progress of the request + */ + public void progressReceived(String identifier, HighLevelProgress highLevelProgress); + +} -- 2.7.4