/**
* The configuration.
- *
+ *
* @author David ‘Bombe’ Roden <bombe@freenetproject.org>
*/
public class Configuration {
/**
* Creates a new configuration that is read from the given file.
- *
+ *
* @param filename
* The name of the configuration file
*/
/**
* Creates a new configuration that is read from the given file and uses the
* given lock file.
- *
+ *
* @param filename
* The name of the configuration file
* @param lockFilename
/**
* Creates the directory of the configuration file.
- *
+ *
* @return <code>true</code> if the directory exists, or if it could be
* created, <code>false</code> otherwise
*/
/**
* Creates the lock file.
- *
+ *
* @return <code>true</code> if the lock file did not already exist and
* could be created, <code>false</code> otherwise
*/
return false;
}
File lockFile = new File(lockFilename);
- lockFile.deleteOnExit();
try {
- return lockFile.createNewFile();
+ boolean fileLocked = lockFile.createNewFile();
+ if (fileLocked) {
+ lockFile.deleteOnExit();
+ }
+ return fileLocked;
} catch (IOException e) {
/* ignore. */
}
}
/**
+ * Tells the VM to remove the lock file on program exit.
+ */
+ public void removeLockfileOnExit() {
+ new File(lockFilename).deleteOnExit();
+ }
+
+ /**
* Reads the configuration from the file.
*/
private void readConfiguration() {
/**
* Saves the configuration.
- *
+ *
* @return <code>true</code> if the configuration could be saved,
* <code>false</code> otherwise
*/
/**
* Returns the value of a node.
- *
+ *
* @param nodeNames
* The name of all nodes in the chain
* @param defaultValue
/**
* Returns the integer value of a node.
- *
+ *
* @param nodeNames
* The names of all nodes in the chain
* @param defaultValue
/**
* Returns the boolean value of a node.
- *
+ *
* @param nodeNames
* The names of all nodes in the chain
* @param defaultValue
/**
* Returns the hostname of the node.
- *
+ *
* @return The hostname of the node
* @deprecated Use {@link #getSelectedNode()} instead
*/
/**
* Sets the hostname of the node.
- *
+ *
* @param nodeAddress
* The hostname of the node
* @deprecated Use {@link #setSelectedNode(Node)} instead
/**
* The port number of the node
- *
+ *
* @return The port number of the node
* @deprecated Use {@link #getSelectedNode()} instead.
*/
/**
* Sets the port number of the node.
- *
+ *
* @param nodePort
* The port number of the node
* @deprecated Use {@link #setSelectedNode(Node)} instead
/**
* Returns whether the node configuration page should be skipped on startup.
- *
- * @return <code>true</code> to skip the node configuration page on
- * startup, <code>false</code> to show it
+ *
+ * @return <code>true</code> to skip the node configuration page on startup,
+ * <code>false</code> to show it
*/
public boolean isSkipNodePage() {
return getNodeBooleanValue(new String[] { "skip-node-page" }, false);
/**
* Sets whether the node configuration page should be skipped on startup.
- *
+ *
* @param skipNodePage
* <code>true</code> to skip the node configuration page on
* startup, <code>false</code> to show it
/**
* Returns all configured projects.
- *
+ *
* @return A list of all projects
*/
public Project[] getProjects() {
try {
Project project = new Project();
projects.add(project);
- project.setDescription(projectNode.getNode("description").getValue());
- project.setIndexFile(projectNode.getNode("index-file").getValue());
- project.setLastInsertionTime(Long.parseLong(projectNode.getNode("last-insertion-time").getValue()));
- project.setLocalPath(projectNode.getNode("local-path").getValue());
- project.setName(projectNode.getNode("name").getValue());
- project.setPath(projectNode.getNode("path").getValue());
+ project.setDescription(projectNode.getNode("description").getValue(""));
+ project.setIndexFile(projectNode.getNode("index-file").getValue(""));
+ project.setLastInsertionTime(Long.parseLong(projectNode.getNode("last-insertion-time").getValue("0")));
+ project.setLocalPath(projectNode.getNode("local-path").getValue(""));
+ project.setName(projectNode.getNode("name").getValue(""));
+ project.setPath(projectNode.getNode("path").getValue(""));
if ((project.getPath() != null) && (project.getPath().indexOf("/") != -1)) {
project.setPath(project.getPath().replaceAll("/", ""));
}
- project.setEdition(Integer.parseInt(projectNode.getNode("edition").getValue()));
- project.setInsertURI(projectNode.getNode("insert-uri").getValue());
- project.setRequestURI(projectNode.getNode("request-uri").getValue());
+ project.setEdition(Integer.parseInt(projectNode.getNode("edition").getValue("0")));
+ project.setInsertURI(projectNode.getNode("insert-uri").getValue(""));
+ project.setRequestURI(projectNode.getNode("request-uri").getValue(""));
+ if (projectNode.getNode("ignore-hidden-files") != null) {
+ project.setIgnoreHiddenFiles(Boolean.parseBoolean(projectNode.getNode("ignore-hidden-files").getValue("true")));
+ } else {
+ project.setIgnoreHiddenFiles(true);
+ }
SimpleXML fileOptionsNode = projectNode.getNode("file-options");
Map<String, FileOption> fileOptions = new HashMap<String, FileOption>();
if (fileOptionsNode != null) {
String filename = fileOptionNode.getNode("filename").getValue();
FileOption fileOption = project.getFileOption(filename);
fileOption.setInsert(Boolean.parseBoolean(fileOptionNode.getNode("insert").getValue()));
- fileOption.setCustomKey(fileOptionNode.getNode("custom-key").getValue());
- fileOption.setMimeType(fileOptionNode.getNode("mime-type").getValue());
+ fileOption.setCustomKey(fileOptionNode.getNode("custom-key").getValue(""));
+ fileOption.setMimeType(fileOptionNode.getNode("mime-type").getValue(""));
fileOption.setContainer(fileOptionNode.getNode("container").getValue());
if (fileOptionNode.getNode("replace-edition") != null) {
fileOption.setReplaceEdition(Boolean.parseBoolean(fileOptionNode.getNode("replace-edition").getValue()));
/**
* Sets the list of all projects.
- *
+ *
* @param projects
* The list of all projects
*/
projectNode.append("path", project.getPath());
projectNode.append("insert-uri", project.getInsertURI());
projectNode.append("request-uri", project.getRequestURI());
+ projectNode.append("ignore-hidden-files", String.valueOf(project.isIgnoreHiddenFiles()));
SimpleXML fileOptionsNode = projectNode.append("file-options");
Iterator<Entry<String, FileOption>> entries = project.getFileOptions().entrySet().iterator();
while (entries.hasNext()) {
/**
* Returns the stored locale.
- *
+ *
* @return The stored locale
*/
public Locale getLocale() {
/**
* Sets the locale to store.
- *
+ *
* @param locale
* The locale to store
*/
/**
* Returns a list of configured nodes.
- *
+ *
* @return The list of the configured nodes
*/
public Node[] getNodes() {
/**
* Sets the list of configured nodes.
- *
+ *
* @param nodes
* The list of configured nodes
*/
/**
* Sets the selected node.
- *
+ *
* @param selectedNode
* The selected node
*/
/**
* Returns the selected node.
- *
+ *
* @return The selected node
*/
public Node getSelectedNode() {
return new Node(hostname, port, name);
}
+ /**
+ * Returns the temp directory to use.
+ *
+ * @return The temp directoy, or {@code null} to use the default temp
+ * directory
+ */
+ public String getTempDirectory() {
+ return getNodeValue(new String[] { "temp-directory" }, null);
+ }
+
+ /**
+ * Sets the temp directory to use.
+ *
+ * @param tempDirectory
+ * The temp directory to use, or {@code null} to use the default
+ * temp directory
+ */
+ public void setTempDirectory(String tempDirectory) {
+ if (tempDirectory != null) {
+ SimpleXML tempDirectoryNode = new SimpleXML("temp-directory");
+ tempDirectoryNode.setValue(tempDirectory);
+ rootNode.replace(tempDirectoryNode);
+ } else {
+ rootNode.remove("temp-directory");
+ }
+ }
+
}