first version of request table
[jSite2.git] / src / net / pterodactylus / jsite / core / Request.java
index 47349ca..6f8afa1 100644 (file)
 
 package net.pterodactylus.jsite.core;
 
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
 /**
  * A request is an ongoing download or upload reported by the freenet node.
  * 
@@ -27,20 +33,122 @@ package net.pterodactylus.jsite.core;
  */
 public class Request {
 
+       /** Name of the “client token” property. */
+       public static final String PROPERTY_CLIENT_TOKEN = "clientToken";
+
+       /** Name of the “total blocks” property. */
+       public static final String PROPERTY_TOTAL_BLOCKS = "totalBlocks";
+
+       /** Name of the “required blocks” property. */
+       public static final String PROPERTY_REQUIRED_BLOCKS = "requiredBlocks";
+
+       /** Name of the “successful blocks” property. */
+       public static final String PROPERTY_SUCCESSFUL_BLOCKS = "successfulBlocks";
+
+       /** Name of the “failed blocks” property. */
+       public static final String PROPERTY_FAILED_BLOCKS = "failedBlocks";
+
+       /** Name of the “fatally failed blocks” property. */
+       public static final String PROPERTY_FATALLY_FAILED_BLOCKS = "fatallyFailedBlocks";
+
+       /** Name of the “total finalized” property. */
+       public static final String PROPERTY_TOTAL_FINALIZED = "totalFinalized";
+
+       /** Property change listeners. */
+       private final List<PropertyChangeListener> propertyChangeListeners = Collections.synchronizedList(new ArrayList<PropertyChangeListener>());
+
+       /** The node the request belongs to. */
+       private final Node node;
+
        /** The identifier of the request. */
        private final String identifier;
 
+       /** The client token of the request. */
+       private String clientToken;
+
+       /** The total number of blocks. */
+       private int totalBlocks;
+
+       /** The required number of blocks. */
+       private int requiredBlocks;
+
+       /** The number of successful blocks. */
+       private int successfulBlocks;
+
+       /** The number of failedBlocks. */
+       private int failedBlocks;
+
+       /** The number of fatally failed blocks. */
+       private int fatallyFailedBlocks;
+
+       /** Whether the total number has been finalized. */
+       private boolean totalFinalized;
+
+       //
+       // EVENT MANAGEMENT
+       //
+
+       /**
+        * Adds a property change listener.
+        * 
+        * @param propertyChangeListener
+        *            The property change listener to add
+        */
+       public void addPropertyChangeListener(PropertyChangeListener propertyChangeListener) {
+               propertyChangeListeners.add(propertyChangeListener);
+       }
+
+       /**
+        * Removes a property change listener.
+        * 
+        * @param propertyChangeListener
+        *            The property change listener to remove
+        */
+       public void removePropertyChangeListener(PropertyChangeListener propertyChangeListener) {
+               propertyChangeListeners.remove(propertyChangeListener);
+       }
+
+       /**
+        * Notifies all listeners that a property has changed.
+        * 
+        * @param property
+        *            The name of the property
+        * @param oldValue
+        *            The old value of the property
+        * @param newValue
+        *            The new value of the property
+        */
+       private void firePropertyChange(String property, Object oldValue, Object newValue) {
+               PropertyChangeEvent propertyChangeEvent = new PropertyChangeEvent(this, property, oldValue, newValue);
+               for (PropertyChangeListener propertyChangeListener: propertyChangeListeners) {
+                       propertyChangeListener.propertyChange(propertyChangeEvent);
+               }
+
+       }
+
        /**
         * Creates a new request with the given identifier.
         * 
+        * @param node
+        *            The node the request belongs to
         * @param identifier
         *            The identifier of the request
         */
-       Request(String identifier) {
+       Request(Node node, String identifier) {
+               this.node = node;
                this.identifier = identifier;
        }
 
        /**
+        * Returns the node the request belongs to.
+        * 
+        * @return The node the request belongs to
+        */
+       public Node getNode() {
+               return node;
+       }
+
+       /**
         * Returns the identifier of the request. It is unique per node.
         * 
         * @return The identifier of the request
@@ -49,4 +157,147 @@ public class Request {
                return identifier;
        }
 
+       /**
+        * Returns the client token of the request.
+        * 
+        * @return The client token of the request
+        */
+       public String getClientToken() {
+               return clientToken;
+       }
+
+       /**
+        * Sets the client token of the request.
+        * 
+        * @param clientToken
+        *            The client token of the request
+        */
+       public void setClientToken(String clientToken) {
+               String oldClientToken = this.clientToken;
+               this.clientToken = clientToken;
+               if (((oldClientToken == null) && (clientToken != null)) || ((oldClientToken != null) && (clientToken == null)) || ((clientToken != null) && !clientToken.equals(oldClientToken))) {
+                       firePropertyChange(PROPERTY_CLIENT_TOKEN, oldClientToken, clientToken);
+               }
+       }
+
+       /**
+        * Returns the total number of blocks of a request. Until
+        * {@link #isTotalFinalized()} returns <code>true</code> this value may
+        * change!
+        * 
+        * @return The total number of blocks of a request
+        */
+       public int getTotalBlocks() {
+               return totalBlocks;
+       }
+
+       /**
+        * Sets the total number of blocks of a request.
+        * 
+        * @param totalBlocks
+        *            The total number of blocks
+        */
+       public void setTotalBlocks(int totalBlocks) {
+               int oldTotalBlocks = this.totalBlocks;
+               this.totalBlocks = totalBlocks;
+               if (oldTotalBlocks != totalBlocks) {
+                       firePropertyChange(PROPERTY_TOTAL_BLOCKS, oldTotalBlocks, totalBlocks);
+               }
+       }
+
+       /**
+        * @return the requiredBlocks
+        */
+       public int getRequiredBlocks() {
+               return requiredBlocks;
+       }
+
+       /**
+        * @param requiredBlocks
+        *            the requiredBlocks to set
+        */
+       public void setRequiredBlocks(int requiredBlocks) {
+               int oldRequiredBlocks = this.requiredBlocks;
+               this.requiredBlocks = requiredBlocks;
+               if (oldRequiredBlocks != requiredBlocks) {
+                       firePropertyChange(PROPERTY_REQUIRED_BLOCKS, oldRequiredBlocks, requiredBlocks);
+               }
+       }
+
+       /**
+        * @return the successfulBlocks
+        */
+       public int getSuccessfulBlocks() {
+               return successfulBlocks;
+       }
+
+       /**
+        * @param successfulBlocks
+        *            the successfulBlocks to set
+        */
+       public void setSuccessfulBlocks(int successfulBlocks) {
+               int oldSuccessfulBlocks = this.successfulBlocks;
+               this.successfulBlocks = successfulBlocks;
+               if (oldSuccessfulBlocks != successfulBlocks) {
+                       firePropertyChange(PROPERTY_SUCCESSFUL_BLOCKS, oldSuccessfulBlocks, successfulBlocks);
+               }
+       }
+
+       /**
+        * @return the failedBlocks
+        */
+       public int getFailedBlocks() {
+               return failedBlocks;
+       }
+
+       /**
+        * @param failedBlocks
+        *            the failedBlocks to set
+        */
+       public void setFailedBlocks(int failedBlocks) {
+               int oldFailedBlocks = this.failedBlocks;
+               this.failedBlocks = failedBlocks;
+               if (oldFailedBlocks != failedBlocks) {
+                       firePropertyChange(PROPERTY_FAILED_BLOCKS, oldFailedBlocks, failedBlocks);
+               }
+       }
+
+       /**
+        * @return the fatallyFailedBlocks
+        */
+       public int getFatallyFailedBlocks() {
+               return fatallyFailedBlocks;
+       }
+
+       /**
+        * @param fatallyFailedBlocks
+        *            the fatallyFailedBlocks to set
+        */
+       public void setFatallyFailedBlocks(int fatallyFailedBlocks) {
+               int oldFatallyFailedBlocks = this.fatallyFailedBlocks;
+               this.fatallyFailedBlocks = fatallyFailedBlocks;
+               if (oldFatallyFailedBlocks != fatallyFailedBlocks) {
+                       firePropertyChange(PROPERTY_FATALLY_FAILED_BLOCKS, oldFatallyFailedBlocks, fatallyFailedBlocks);
+               }
+       }
+
+       /**
+        * @return the totalFinalized
+        */
+       public boolean isTotalFinalized() {
+               return totalFinalized;
+       }
+
+       /**
+        * @param totalFinalized
+        *            the totalFinalized to set
+        */
+       public void setTotalFinalized(boolean totalFinalized) {
+               boolean oldTotalFinalized = this.totalFinalized;
+               this.totalFinalized = totalFinalized;
+               if (oldTotalFinalized != totalFinalized) {
+                       firePropertyChange(PROPERTY_TOTAL_FINALIZED, oldTotalFinalized, totalFinalized);
+               }
+       }
+
 }