/* * 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); } }