X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fde%2Ftodesbaum%2Fjsite%2Fapplication%2FProject.java;h=fa0b774dccac4f49922d285a46b27277287e0f84;hb=953de352675a4ad91fe307d816a4ea7780c94274;hp=7b4dc0046e1abaa6c95d1c074fac688f4e286627;hpb=9d9c760f421487c46e93cdb2a04273c3a36e1a2f;p=jSite.git diff --git a/src/de/todesbaum/jsite/application/Project.java b/src/de/todesbaum/jsite/application/Project.java index 7b4dc00..fa0b774 100644 --- a/src/de/todesbaum/jsite/application/Project.java +++ b/src/de/todesbaum/jsite/application/Project.java @@ -1,20 +1,19 @@ /* - * jSite - a tool for uploading websites into Freenet - * Copyright (C) 2006 David Roden + * jSite - Project.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 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. + * 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. + * 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.jsite.application; @@ -23,12 +22,13 @@ import java.io.File; import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; import de.todesbaum.util.mime.DefaultMIMETypes; /** * Container for project information. - * + * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> */ public class Project implements Comparable { @@ -60,6 +60,9 @@ public class Project implements Comparable { /** The edition to insert to. */ protected int edition; + /** Whether to ignore hidden directory. */ + private boolean ignoreHiddenFiles; + /** Options for files. */ protected Map fileOptions = new HashMap(); @@ -72,7 +75,7 @@ public class Project implements Comparable { /** * Creates a new project from an existing one. - * + * * @param project * The project to clone */ @@ -86,12 +89,13 @@ public class Project implements Comparable { localPath = project.localPath; indexFile = project.indexFile; lastInsertionTime = project.lastInsertionTime; + ignoreHiddenFiles = project.ignoreHiddenFiles; fileOptions = new HashMap(project.fileOptions); } /** * Returns the name of the project. - * + * * @return The name of the project */ public String getName() { @@ -100,7 +104,7 @@ public class Project implements Comparable { /** * Sets the name of the project. - * + * * @param name * The name of the project */ @@ -110,7 +114,7 @@ public class Project implements Comparable { /** * Returns the description of the project. - * + * * @return The description of the project */ public String getDescription() { @@ -119,7 +123,7 @@ public class Project implements Comparable { /** * Sets the description of the project. - * + * * @param description * The description of the project */ @@ -129,7 +133,7 @@ public class Project implements Comparable { /** * Returns the local path of the project. - * + * * @return The local path of the project */ public String getLocalPath() { @@ -138,7 +142,7 @@ public class Project implements Comparable { /** * Sets the local path of the project. - * + * * @param localPath * The local path of the project */ @@ -149,7 +153,7 @@ public class Project implements Comparable { /** * Returns the name of the index file of the project, relative to the * project’s local path. - * + * * @return The name of the index file of the project */ public String getIndexFile() { @@ -159,7 +163,7 @@ public class Project implements Comparable { /** * Sets the name of the index file of the project, relative to the project’s * local path. - * + * * @param indexFile * The name of the index file of the project */ @@ -170,7 +174,7 @@ public class Project implements Comparable { /** * Returns the time the project was last inserted, in milliseconds since the * epoch. - * + * * @return The time of the last insertion */ public long getLastInsertionTime() { @@ -180,7 +184,7 @@ public class Project implements Comparable { /** * Sets the time the project was last inserted, in milliseconds since the * last epoch. - * + * * @param lastInserted * The time of the last insertion */ @@ -191,7 +195,7 @@ public class Project implements Comparable { /** * Returns the remote path of the project. The remote path is the path that * directly follows the request URI of the project. - * + * * @return The remote path of the project */ public String getPath() { @@ -201,7 +205,7 @@ public class Project implements Comparable { /** * Sets the remote path of the project. The remote path is the path that * directly follows the request URI of the project. - * + * * @param path * The remote path of the project */ @@ -211,7 +215,7 @@ public class Project implements Comparable { /** * Returns the insert URI of the project. - * + * * @return The insert URI of the project */ public String getInsertURI() { @@ -220,7 +224,7 @@ public class Project implements Comparable { /** * Sets the insert URI of the project. - * + * * @param insertURI * The insert URI of the project */ @@ -230,7 +234,7 @@ public class Project implements Comparable { /** * Returns the request URI of the project. - * + * * @return The request URI of the project */ public String getRequestURI() { @@ -239,7 +243,7 @@ public class Project implements Comparable { /** * Sets the request URI of the project. - * + * * @param requestURI * The request URI of the project */ @@ -248,6 +252,27 @@ public class Project implements Comparable { } /** + * Returns whether hidden files are ignored, i.e. not inserted. + * + * @return {@code true} if hidden files are not inserted, {@code false} + * otherwise + */ + public boolean isIgnoreHiddenFiles() { + return ignoreHiddenFiles; + } + + /** + * Sets whether hidden files are ignored, i.e. not inserted. + * + * @param ignoreHiddenFiles + * {@code true} if hidden files are not inserted, {@code false} + * otherwise + */ + public void setIgnoreHiddenFiles(boolean ignoreHiddenFiles) { + this.ignoreHiddenFiles = ignoreHiddenFiles; + } + + /** * {@inheritDoc} *

* This method returns the name of the project. @@ -259,31 +284,32 @@ public class Project implements Comparable { /** * Shortens the given URI by removing scheme and key-type prefixes. - * + * * @param uri * The URI to shorten * @return The shortened URI */ private String shortenURI(String uri) { - if (uri.startsWith("freenet:")) { - uri = uri.substring("freenet:".length()); + String shortUri = uri; + if (shortUri.startsWith("freenet:")) { + shortUri = shortUri.substring("freenet:".length()); } - if (uri.startsWith("SSK@")) { - uri = uri.substring("SSK@".length()); + if (shortUri.startsWith("SSK@")) { + shortUri = shortUri.substring("SSK@".length()); } - if (uri.startsWith("USK@")) { - uri = uri.substring("USK@".length()); + if (shortUri.startsWith("USK@")) { + shortUri = shortUri.substring("USK@".length()); } - if (uri.endsWith("/")) { - uri = uri.substring(0, uri.length() - 1); + if (shortUri.endsWith("/")) { + shortUri = shortUri.substring(0, shortUri.length() - 1); } - return uri; + return shortUri; } /** * Shortens the name of the given file by removing the local path of the * project and leading file separators. - * + * * @param file * The file whose name should be shortened * @return The shortened name of the file @@ -303,7 +329,7 @@ public class Project implements Comparable { * Returns the options for the file with the given name. If the file does * not yet have any options, a new set of default options is created and * returned. - * + * * @param filename * The name of the file, relative to the project root * @return The options for the file @@ -319,7 +345,7 @@ public class Project implements Comparable { /** * Sets options for a file. - * + * * @param filename * The filename to set the options for, relative to the project * root @@ -337,7 +363,7 @@ public class Project implements Comparable { /** * Returns all file options. - * + * * @return All file options */ public Map getFileOptions() { @@ -346,7 +372,7 @@ public class Project implements Comparable { /** * Sets all file options. - * + * * @param fileOptions * The file options */ @@ -366,7 +392,7 @@ public class Project implements Comparable { /** * Returns the edition of the project. - * + * * @return The edition of the project */ public int getEdition() { @@ -375,7 +401,7 @@ public class Project implements Comparable { /** * Sets the edition of the project. - * + * * @param edition * The edition to set */ @@ -385,7 +411,7 @@ public class Project implements Comparable { /** * Constructs the final request URI including the edition number. - * + * * @param offset * The offset for the edition number * @return The final request URI @@ -394,4 +420,22 @@ public class Project implements Comparable { return "USK@" + requestURI + "/" + path + "/" + (edition + offset) + "/"; } + /** + * Performs some post-processing on the project after it was inserted + * successfully. At the moment it copies the current hashes of all file + * options to the last insert hashes, updating the hashes for the next + * insert. + */ + public void onSuccessfulInsert() { + for (Entry fileOptionEntry : fileOptions.entrySet()) { + FileOption fileOption = fileOptionEntry.getValue(); + if ((fileOption.getCurrentHash() != null) && (fileOption.getCurrentHash().length() > 0) && (!fileOption.getCurrentHash().equals(fileOption.getLastInsertHash()) || fileOption.isForceInsert())) { + fileOption.setLastInsertEdition(edition); + fileOption.setLastInsertHash(fileOption.getCurrentHash()); + fileOption.setLastInsertFilename(fileOption.hasChangedName() ? fileOption.getChangedName() : fileOptionEntry.getKey()); + } + fileOption.setForceInsert(false); + } + } + }