X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fde%2Ftodesbaum%2Fjsite%2Fapplication%2FFileOption.java;h=4eec3bf5dda3272eb43ddfcb16fa796fddbd8143;hb=4af9804b36fb0e9899a7cd7961e58e8f5dd9634c;hp=6b979a6ef0fd73c2c10bf4a25fd1cd6b1c40a36f;hpb=06b7eb1d2c0499330f495125708ea20d17ca788f;p=jSite.git diff --git a/src/de/todesbaum/jsite/application/FileOption.java b/src/de/todesbaum/jsite/application/FileOption.java index 6b979a6..4eec3bf 100644 --- a/src/de/todesbaum/jsite/application/FileOption.java +++ b/src/de/todesbaum/jsite/application/FileOption.java @@ -1,6 +1,5 @@ /* - * jSite - a tool for uploading websites into Freenet Copyright (C) 2006 David - * Roden + * jSite - FileOption.java - Copyright © 2006–2011 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 @@ -29,39 +28,45 @@ public class FileOption { /** The default for the insert state. */ private static final boolean DEFAULT_INSERT = true; + /** The default for the insert redirect state. */ + private static final boolean DEFAULT_INSERT_REDIRECT = true; + /** The default for the custom key. */ private static final String DEFAULT_CUSTOM_KEY = "CHK@"; - /** The default container. */ - private static final String DEFAULT_CONTAINER = ""; - - /** The default edition range. */ - private static final int DEFAULT_EDITION_RANGE = 3; - - /** The default for the replace edition state. */ - private static final boolean DEFAULT_REPLACE_EDITION = false; + /** The default changed name. */ + private static final String DEFAULT_CHANGED_NAME = null; /** The insert state. */ private boolean insert; + /** Whether to force an insert. */ + private boolean forceInsert; + + /** Whether to insert a redirect. */ + private boolean insertRedirect; + + /** The hash of the last insert. */ + private String lastInsertHash; + + /** The edition of the last insert. */ + private int lastInsertEdition; + + /** The current hash of the file. */ + private String currentHash; + /** The custom key. */ private String customKey; + /** The changed name. */ + private String changedName; + /** The default MIME type. */ private final String defaultMimeType; /** The current MIME type. */ private String mimeType; - /** The container. */ - private String container; - - /** The edition range. */ - private int editionRange; - - /** The replace edition state. */ - private boolean replaceEdition; - /** * Creates new file options. * @@ -70,17 +75,17 @@ public class FileOption { */ public FileOption(String defaultMimeType) { insert = DEFAULT_INSERT; + insertRedirect = DEFAULT_INSERT_REDIRECT; customKey = DEFAULT_CUSTOM_KEY; + changedName = DEFAULT_CHANGED_NAME; this.defaultMimeType = defaultMimeType; mimeType = defaultMimeType; - container = DEFAULT_CONTAINER; - editionRange = DEFAULT_EDITION_RANGE; - replaceEdition = DEFAULT_REPLACE_EDITION; } /** * Returns the custom key. The custom key is only used when - * {@link #isInsert()} returns true. + * {@link #isInsert()} and {@link #isInsertRedirect()} both return {@code + * true}. * * @return The custom key */ @@ -90,7 +95,7 @@ public class FileOption { /** * Sets the custom key. The custom key is only used when {@link #isInsert()} - * returns true. + * and {@link #isInsertRedirect()} both return {@code true}. * * @param customKey * The custom key @@ -104,8 +109,9 @@ public class FileOption { } /** - * Returns whether the file should be inserted. If a file is not inserted, a - * custom key has to be specified for it. + * Returns whether the file should be inserted. If a file is not inserted + * and {@link #isInsertRedirect()} is also {@code false}, the file will not + * be inserted at all. * * @see #setCustomKey(String) * @return true if the file should be inserted, @@ -116,8 +122,9 @@ public class FileOption { } /** - * Sets whether the file should be inserted. If a file is not inserted, a - * custom key has to be specified for it. + * Sets whether the file should be inserted. If a file is not inserted and + * {@link #isInsertRedirect()} is also {@code false}, the file will not be + * inserted at all. * * @param insert * true if the file should be inserted, @@ -128,91 +135,180 @@ public class FileOption { } /** - * Sets the MIME type of the file. Setting the MIME type to - * null will set the MIME type to the default MIME type. + * Returns whether the insert of this file should be forced, even if its + * current hash matches the last insert hash. * - * @param mimeType - * The MIME type of the file + * @return {@code true} to force the insert of this file, {@code false} + * otherwise */ - public void setMimeType(String mimeType) { - if (mimeType == null) { - this.mimeType = defaultMimeType; - } else { - this.mimeType = mimeType; - } + public boolean isForceInsert() { + return forceInsert; } /** - * Returns the MIME type of the file. If no custom MIME type has been set, - * the default MIME type is returned. + * Sets whether to force the insert of this file, even if its current hash + * matches the last insert hash. * - * @return The MIME type of the file + * @param forceInsert + * {@code true} to force the insert of this file, {@code false} + * otherwise + * @return These file options */ - public String getMimeType() { - return mimeType; + public FileOption setForceInsert(boolean forceInsert) { + this.forceInsert = forceInsert; + return this; } /** - * Returns the name of the container this file should be put in. + * Returns whether a redirect to a different key should be inserted. This + * will only matter if {@link #isInsert()} returns {@code false}. The key + * that should be redirected to still needs to be specified via + * {@link #setCustomKey(String)}. * - * @return The name of the container + * @return {@code true} if a redirect should be inserted, {@code false} + * otherwise */ - public String getContainer() { - return container; + public boolean isInsertRedirect() { + return insertRedirect; } /** - * Sets the name of the container this file should be put in. + * Sets whether a redirect should be inserted. This will only matter if + * {@link #isInsert()} returns {@code false}, i.e. it has been + * {@link #setInsert(boolean)} to {@code false}. The key that should be + * redirected to still needs to be specified via + * {@link #setCustomKey(String)}. * - * @param container - * The name of the container + * @param insertRedirect + * {@code true} if a redirect should be inserted, {@code false} + * otherwise */ - public void setContainer(String container) { - if (container == null) { - this.container = DEFAULT_CONTAINER; - } else { - this.container = container; - } + public void setInsertRedirect(boolean insertRedirect) { + this.insertRedirect = insertRedirect; } /** - * Sets whether the file should have “$[EDITION+n]” tags replaced. + * Returns the hash of the file when it was last inserted * - * @param replaceEdition - * true to replace tags, false not to - * replace + * @return The last hash of the file */ - public void setReplaceEdition(boolean replaceEdition) { - this.replaceEdition = replaceEdition; + public String getLastInsertHash() { + return lastInsertHash; } /** - * Returns whether the file should have “$[EDITION+n]” tags replaced. + * Sets the hash of the file when it was last inserted. * - * @return true if tags should be replaced, false + * @param lastInsertHash + * The last hash of the file + * @return These file options + */ + public FileOption setLastInsertHash(String lastInsertHash) { + this.lastInsertHash = lastInsertHash; + return this; + } + + /** + * Returns the last edition at which this file was inserted. + * + * @return The last insert edition of this file + */ + public int getLastInsertEdition() { + return lastInsertEdition; + } + + /** + * Sets the last insert edition of this file. + * + * @param lastInsertEdition + * The last insert edition of this file + * @return These file options + */ + public FileOption setLastInsertEdition(int lastInsertEdition) { + this.lastInsertEdition = lastInsertEdition; + return this; + } + + /** + * Returns the current hash of the file. This value is ony a temporary value + * that is copied to {@link #getLastInsertHash()} when a project has + * finished inserting. + * + * @see Project#onSuccessfulInsert() + * @return The current hash of the file + */ + public String getCurrentHash() { + return currentHash; + } + + /** + * Sets the current hash of the file. + * + * @param currentHash + * The current hash of the file + * @return These file options + */ + public FileOption setCurrentHash(String currentHash) { + this.currentHash = currentHash; + return this; + } + + /** + * Returns whether this file has a changed name. Use + * {@link #getChangedName()} is this method returns {@code true}. + * + * @return {@code true} if this file has a changed name, {@code false} * otherwise */ - public boolean getReplaceEdition() { - return replaceEdition; + public boolean hasChangedName() { + return (changedName != null) && (changedName.length() > 0); + } + + /** + * Returns the changed name for this file. This method will return {@code + * null} or an empty {@link String} if this file should not be renamed. + * + * @return The changed name, or {@code null} if this file should not be + * renamed + */ + public String getChangedName() { + return changedName; + } + + /** + * Sets the changed name for this file. Setting the changed file to {@code + * null} or an empty {@link String} will disable renaming. + * + * @param changedName + * The new changed name for this file + */ + public void setChangedName(String changedName) { + this.changedName = changedName; } /** - * Sets the range of editions that should be replaced. + * Sets the MIME type of the file. Setting the MIME type to + * null will set the MIME type to the default MIME type. * - * @param editionRange - * The range editions to replace + * @param mimeType + * The MIME type of the file */ - public void setEditionRange(int editionRange) { - this.editionRange = editionRange; + public void setMimeType(String mimeType) { + if (mimeType == null) { + this.mimeType = defaultMimeType; + } else { + this.mimeType = mimeType; + } } /** - * Returns the range of editions that should be replaced. + * Returns the MIME type of the file. If no custom MIME type has been set, + * the default MIME type is returned. * - * @return The range of editions to replace + * @return The MIME type of the file */ - public int getEditionRange() { - return editionRange; + public String getMimeType() { + return mimeType; } /** @@ -229,16 +325,13 @@ public class FileOption { if (!customKey.equals(DEFAULT_CUSTOM_KEY)) { return true; } - if (!defaultMimeType.equals(mimeType)) { + if (((changedName != null) && !changedName.equals(DEFAULT_CHANGED_NAME)) || ((DEFAULT_CHANGED_NAME != null) && !DEFAULT_CHANGED_NAME.equals(changedName))) { return true; } - if (!DEFAULT_CONTAINER.equals(container)) { - return true; - } - if (replaceEdition != DEFAULT_REPLACE_EDITION) { + if (!defaultMimeType.equals(mimeType)) { return true; } - if (editionRange != DEFAULT_EDITION_RANGE) { + if (insertRedirect != DEFAULT_INSERT_REDIRECT) { return true; } return false;