Merge branch 'release-0.11'
[jSite.git] / src / main / java / de / todesbaum / util / freenet / fcp2 / ClientPut.java
diff --git a/src/main/java/de/todesbaum/util/freenet/fcp2/ClientPut.java b/src/main/java/de/todesbaum/util/freenet/fcp2/ClientPut.java
new file mode 100644 (file)
index 0000000..9993173
--- /dev/null
@@ -0,0 +1,243 @@
+/*
+ * jSite - ClientPut.java - Copyright © 2006–2012 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 de.todesbaum.util.freenet.fcp2;
+
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * Abstract base class for all put requests. It contains all parameters that put
+ * requests have in common.
+ *
+ * @author David Roden <droden@gmail.com>
+ * @version $Id$
+ */
+public abstract class ClientPut extends Command {
+
+       /** The URI of this request. */
+       protected final String uri;
+
+       /** The client token of this request. */
+       protected String clientToken = null;
+
+       /** Whether this request should only create a CHK. */
+       protected boolean getCHKOnly = false;
+
+       /** Whether this request is a global request. */
+       protected boolean global = false;
+
+       /** Whether the node should not try to compress the file. */
+       protected boolean dontCompress = false;
+
+       /** The maximum number of retries of this command. */
+       protected int maxRetries = 0;
+
+       /** Whether to generate the keys early. */
+       protected boolean earlyEncode = false;
+
+       /** The persistence of this request. */
+       protected Persistence persistence = Persistence.CONNECTION;
+
+       /** The priority class of this request. */
+       protected PriorityClass priorityClass = PriorityClass.INTERACTIVE;
+
+       /** The verbosiry of this request. */
+       protected Verbosity verbosity = Verbosity.NONE;
+
+       /**
+        * Creates a new put request with the specified name, identifier and URI.
+        *
+        * @param name
+        *            The name of this request
+        * @param identifier
+        *            The identifier of this request
+        * @param uri
+        *            The URI of this request
+        */
+       protected ClientPut(String name, String identifier, String uri) {
+               super(name, identifier);
+               this.uri = uri;
+       }
+
+       /**
+        * Returns whether the node should not try to compress the data.
+        *
+        * @return <code>true</code> if the node should <strong>not</strong> try
+        *         to compress the data
+        */
+       public boolean isDontCompress() {
+               return dontCompress;
+       }
+
+       /**
+        * Sets whether the node should not try to compress the data. A client might
+        * set this hint on data that is clearly not compressible, like MPEG audio
+        * files, JPEG or PNG images, highly compressed movies, or compressed
+        * archives like ZIP files. Otherwise the node will try to compress the file
+        * which -- depending on the size of the data -- might take a lot of time
+        * and memory.
+        *
+        * @param dontCompress
+        *            <code>true</code> if the node should <strong>not</strong>
+        *            try to compress the data
+        */
+       public void setDontCompress(boolean dontCompress) {
+               this.dontCompress = dontCompress;
+       }
+
+       /**
+        * Returns whether this request should only return the CHK of the data.
+        * @return Whether this request should only return the CHK of the data
+        */
+       public boolean isGetCHKOnly() {
+               return getCHKOnly;
+       }
+
+       /**
+        * Sets whether this request should only return the CHK of the data.
+        * @param getCHKOnly
+        *            <code>true</code> if this request should only return the CHK of the data
+        */
+       public void setGetCHKOnly(boolean getCHKOnly) {
+               this.getCHKOnly = getCHKOnly;
+       }
+
+       /**
+        * Returns whether this request is a global request.
+        * @return <code>true</code> if this request is a global request, <code>false</code> otherwise
+        */
+       public boolean isGlobal() {
+               return global;
+       }
+
+       /**
+        * Sets whether this request is a global request.
+        * @param global
+        *            <code>true</code> if this request is a global request, <code>false</code> otherwise
+        */
+       public void setGlobal(boolean global) {
+               this.global = global;
+       }
+
+       /**
+        * Returns the maximum number of retries of this request.
+        * @return The maximum number of retries of this request
+        */
+       public int getMaxRetries() {
+               return maxRetries;
+       }
+
+       /**
+        * Sets the maximum number of retries of this request
+        * @param maxRetries
+        *            The maximum number of retries of this request
+        */
+       public void setMaxRetries(int maxRetries) {
+               this.maxRetries = maxRetries;
+       }
+
+       /**
+        * Returns whether the data should be encoded early to generate the final
+        * key as fast as possible.
+        *
+        * @return {@code true} if the key should be generated early, {@code false}
+        *         otherwise
+        */
+       public boolean isEarlyEncode() {
+               return earlyEncode;
+       }
+
+       /**
+        * Sets whether the data should be encoded early to generate the final key
+        * as fast as possible.
+        *
+        * @param earlyEncode
+        *            {@code true} if the key should be generated early, {@code
+        *            false} otherwise
+        */
+       public void setEarlyEncode(boolean earlyEncode) {
+               this.earlyEncode = earlyEncode;
+       }
+
+       /**
+        * Returns the priority class of this request.
+        * @return The priority class of this request
+        */
+       public PriorityClass getPriorityClass() {
+               return priorityClass;
+       }
+
+       /**
+        * Sets the priority class of this request.
+        * @param priorityClass
+        *            The priority class of this request
+        */
+       public void setPriorityClass(PriorityClass priorityClass) {
+               this.priorityClass = priorityClass;
+       }
+
+       /**
+        * Returns the verbosity of this request.
+        * @return The verbosity of this request
+        */
+       public Verbosity getVerbosity() {
+               return verbosity;
+       }
+
+       /**
+        * Sets the verbosity of this request.
+        * @param verbosity
+        *            The verbosity of this request
+        */
+       public void setVerbosity(Verbosity verbosity) {
+               this.verbosity = verbosity;
+       }
+
+       /**
+        * Returns the URI of this request
+        * @return The URI of this request.
+        */
+       public String getUri() {
+               return uri;
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       protected void write(Writer writer) throws IOException {
+               super.write(writer);
+               writer.write("URI=" + uri + LINEFEED);
+               if (verbosity != null)
+                       writer.write("Verbosity=" + verbosity.getValue() + LINEFEED);
+               if (maxRetries != 0)
+                       writer.write("MaxRetries=" + maxRetries + LINEFEED);
+               writer.write("EarlyEncode=" + earlyEncode);
+               if (priorityClass != null)
+                       writer.write("PriorityClass=" + priorityClass.getValue() + LINEFEED);
+               writer.write("GetCHKOnly=" + getCHKOnly + LINEFEED);
+               writer.write("Global=" + global + LINEFEED);
+               writer.write("DontCompress=" + dontCompress + LINEFEED);
+               if (clientToken != null)
+                       writer.write("ClientToken=" + clientToken + LINEFEED);
+               if (persistence != null)
+                       writer.write("Persistence=" + persistence.getName() + LINEFEED);
+       }
+
+}