summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Adams <dinnerbone@dinnerbone.com>2011-10-12 13:24:57 +0100
committerNathan Adams <dinnerbone@dinnerbone.com>2011-10-12 13:24:57 +0100
commit5993f1cc165159e129f70bfd34af1df910bca06b (patch)
treed50c8284b46ca7b636fd1d001357f9cf9c2b8d74
parentdb7bdbbd582c37e7606119dfa8650a9a4c91066d (diff)
downloadbukkit-5993f1cc165159e129f70bfd34af1df910bca06b.tar
bukkit-5993f1cc165159e129f70bfd34af1df910bca06b.tar.gz
bukkit-5993f1cc165159e129f70bfd34af1df910bca06b.tar.lz
bukkit-5993f1cc165159e129f70bfd34af1df910bca06b.tar.xz
bukkit-5993f1cc165159e129f70bfd34af1df910bca06b.zip
Added new FileConfigurationOptions.copyHeader, defaulting to true. Copies the header from default config, if there is one.
-rw-r--r--src/main/java/org/bukkit/configuration/file/FileConfiguration.java10
-rw-r--r--src/main/java/org/bukkit/configuration/file/FileConfigurationOptions.java42
-rw-r--r--src/main/java/org/bukkit/configuration/file/YamlConfiguration.java23
-rw-r--r--src/main/java/org/bukkit/configuration/file/YamlConfigurationOptions.java6
-rw-r--r--src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java66
-rw-r--r--src/test/java/org/bukkit/configuration/file/YamlConfigurationTest.java60
6 files changed, 153 insertions, 54 deletions
diff --git a/src/main/java/org/bukkit/configuration/file/FileConfiguration.java b/src/main/java/org/bukkit/configuration/file/FileConfiguration.java
index a67547b1..409e3921 100644
--- a/src/main/java/org/bukkit/configuration/file/FileConfiguration.java
+++ b/src/main/java/org/bukkit/configuration/file/FileConfiguration.java
@@ -178,6 +178,16 @@ public abstract class FileConfiguration extends MemoryConfiguration {
* @throws IllegalArgumentException Thrown if contents is null.
*/
public abstract void loadFromString(String contents) throws InvalidConfigurationException;
+
+ /**
+ * Compiles the header for this {@link FileConfiguration} and returns the result.
+ * <p>
+ * This will use the header from {@link #options()} -> {@link FileConfigurationOptions#header()},
+ * respecting the rules of {@link FileConfigurationOptions#copyHeader()} if set.
+ *
+ * @return Compiled header
+ */
+ protected abstract String buildHeader();
@Override
public FileConfigurationOptions options() {
diff --git a/src/main/java/org/bukkit/configuration/file/FileConfigurationOptions.java b/src/main/java/org/bukkit/configuration/file/FileConfigurationOptions.java
index 80427204..1da24047 100644
--- a/src/main/java/org/bukkit/configuration/file/FileConfigurationOptions.java
+++ b/src/main/java/org/bukkit/configuration/file/FileConfigurationOptions.java
@@ -7,6 +7,7 @@ import org.bukkit.configuration.*;
*/
public class FileConfigurationOptions extends MemoryConfigurationOptions {
private String header = null;
+ private boolean copyHeader = true;
protected FileConfigurationOptions(MemoryConfiguration configuration) {
super(configuration);
@@ -64,4 +65,45 @@ public class FileConfigurationOptions extends MemoryConfigurationOptions {
this.header = value;
return this;
}
+
+ /**
+ * Gets whether or not the header should be copied from a default source.
+ * <p>
+ * If this is true, if a default {@link FileConfiguration} is passed to
+ * {@link FileConfiguration#setDefaults(org.bukkit.configuration.Configuration)}
+ * then upon saving it will use the header from that config, instead of the one provided here.
+ * <p>
+ * If no default is set on the configuration, or the default is not of type FileConfiguration,
+ * or that config has no header ({@link #header()} returns null) then the header
+ * specified in this configuration will be used.
+ * <p>
+ * Defaults to true.
+ *
+ * @return Whether or not to copy the header
+ */
+ public boolean copyHeader() {
+ return copyHeader;
+ }
+
+ /**
+ * Sets whether or not the header should be copied from a default source.
+ * <p>
+ * If this is true, if a default {@link FileConfiguration} is passed to
+ * {@link FileConfiguration#setDefaults(org.bukkit.configuration.Configuration)}
+ * then upon saving it will use the header from that config, instead of the one provided here.
+ * <p>
+ * If no default is set on the configuration, or the default is not of type FileConfiguration,
+ * or that config has no header ({@link #header()} returns null) then the header
+ * specified in this configuration will be used.
+ * <p>
+ * Defaults to true.
+ *
+ * @param value Whether or not to copy the header
+ * @return This object, for chaining
+ */
+ public FileConfigurationOptions copyHeader(boolean value) {
+ copyHeader = value;
+
+ return this;
+ }
}
diff --git a/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java b/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java
index 55918f7d..f9523b39 100644
--- a/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java
+++ b/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java
@@ -39,13 +39,14 @@ public class YamlConfiguration extends FileConfiguration {
serializeValues(output, getValues(false));
+ String header = buildHeader();
String dump = yaml.dump(output);
if (dump.equals(BLANK_CONFIG)) {
dump = "";
}
- return buildHeader() + dump;
+ return header + dump;
}
@Override
@@ -61,7 +62,12 @@ public class YamlConfiguration extends FileConfiguration {
throw new InvalidConfigurationException("Specified contents is not a valid Configuration", ex);
}
- options().header(parseHeader(contents));
+ String header = parseHeader(contents);
+
+ if (header.length() > 0) {
+ options().header(header);
+ }
+
deserializeValues(input, this);
}
@@ -159,6 +165,19 @@ public class YamlConfiguration extends FileConfiguration {
protected String buildHeader() {
String header = options().header();
+ if (options().copyHeader()) {
+ Configuration def = getDefaults();
+
+ if ((def != null) && (def instanceof FileConfiguration)) {
+ FileConfiguration filedefaults = (FileConfiguration)def;
+ String defaultsHeader = filedefaults.buildHeader();
+
+ if ((defaultsHeader != null) && (defaultsHeader.length() > 0)) {
+ return defaultsHeader;
+ }
+ }
+ }
+
if (header == null) {
return "";
}
diff --git a/src/main/java/org/bukkit/configuration/file/YamlConfigurationOptions.java b/src/main/java/org/bukkit/configuration/file/YamlConfigurationOptions.java
index eee75fb1..25fd6266 100644
--- a/src/main/java/org/bukkit/configuration/file/YamlConfigurationOptions.java
+++ b/src/main/java/org/bukkit/configuration/file/YamlConfigurationOptions.java
@@ -32,6 +32,12 @@ public class YamlConfigurationOptions extends FileConfigurationOptions {
super.header(value);
return this;
}
+
+ @Override
+ public YamlConfigurationOptions copyHeader(boolean value) {
+ super.copyHeader(value);
+ return this;
+ }
/**
* Gets how much spaces should be used to indent each line.
diff --git a/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java b/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java
index 5deb4581..2b976725 100644
--- a/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java
+++ b/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java
@@ -1,9 +1,7 @@
package org.bukkit.configuration.file;
-import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
-import java.io.FileReader;
import java.io.FileWriter;
import java.util.Map;
import org.bukkit.configuration.MemoryConfigurationTest;
@@ -21,6 +19,10 @@ public abstract class FileConfigurationTest extends MemoryConfigurationTest {
public abstract String getTestValuesString();
+ public abstract String getTestHeaderInput();
+
+ public abstract String getTestHeaderResult();
+
@Test
public void testSave_File() throws Exception {
FileConfiguration config = getConfig();
@@ -122,5 +124,65 @@ public abstract class FileConfigurationTest extends MemoryConfigurationTest {
}
assertEquals(values.keySet(), config.getKeys(true));
+ assertEquals(saved, config.saveToString());
+ }
+
+ @Test
+ public void testSaveToStringWithHeader() {
+ FileConfiguration config = getConfig();
+ config.options().header(getTestHeaderInput());
+
+ for (Map.Entry<String, Object> entry : getTestValues().entrySet()) {
+ config.set(entry.getKey(), entry.getValue());
+ }
+
+ String result = config.saveToString();
+ String expected = getTestHeaderResult() + "\n" + getTestValuesString();
+
+ assertEquals(expected, result);
+ }
+
+ @Test
+ public void testParseHeader() throws Exception {
+ FileConfiguration config = getConfig();
+ Map<String, Object> values = getTestValues();
+ String saved = getTestValuesString();
+ String header = getTestHeaderResult();
+ String expected = getTestHeaderInput();
+
+ config.loadFromString(header + "\n" + saved);
+
+ assertEquals(expected, config.options().header());
+
+ for (Map.Entry<String, Object> entry : values.entrySet()) {
+ assertEquals(entry.getValue(), config.get(entry.getKey()));
+ }
+
+ assertEquals(values.keySet(), config.getKeys(true));
+ assertEquals(header + "\n" + saved, config.saveToString());
+ }
+
+ @Test
+ public void testCopyHeader() throws Exception {
+ FileConfiguration config = getConfig();
+ FileConfiguration defaults = getConfig();
+ Map<String, Object> values = getTestValues();
+ String saved = getTestValuesString();
+ String header = getTestHeaderResult();
+ String expected = getTestHeaderInput();
+
+ defaults.loadFromString(header);
+ config.loadFromString(saved);
+ config.setDefaults(defaults);
+
+ assertNull(config.options().header());
+ assertEquals(expected, defaults.options().header());
+
+ for (Map.Entry<String, Object> entry : values.entrySet()) {
+ assertEquals(entry.getValue(), config.get(entry.getKey()));
+ }
+
+ assertEquals(values.keySet(), config.getKeys(true));
+ assertEquals(header + "\n" + saved, config.saveToString());
}
}
diff --git a/src/test/java/org/bukkit/configuration/file/YamlConfigurationTest.java b/src/test/java/org/bukkit/configuration/file/YamlConfigurationTest.java
index 488ce208..239b2f83 100644
--- a/src/test/java/org/bukkit/configuration/file/YamlConfigurationTest.java
+++ b/src/test/java/org/bukkit/configuration/file/YamlConfigurationTest.java
@@ -1,6 +1,5 @@
package org.bukkit.configuration.file;
-import java.util.Map;
import org.junit.Test;
import static org.junit.Assert.*;
@@ -9,6 +8,16 @@ public class YamlConfigurationTest extends FileConfigurationTest {
public YamlConfiguration getConfig() {
return new YamlConfiguration();
}
+
+ @Override
+ public String getTestHeaderInput() {
+ return "This is a sample\nheader.\n\nNewline above should be commented.\n\n";
+ }
+
+ @Override
+ public String getTestHeaderResult() {
+ return "# This is a sample\n# header.\n# \n# Newline above should be commented.\n\n";
+ }
@Override
public String getTestValuesString() {
@@ -31,55 +40,6 @@ public class YamlConfigurationTest extends FileConfigurationTest {
}
@Test
- public void testSaveToStringWithHeader() {
- YamlConfiguration config = getConfig();
- config.options().header("This is a sample\nheader.");
-
- for (Map.Entry<String, Object> entry : getTestValues().entrySet()) {
- config.set(entry.getKey(), entry.getValue());
- }
-
- String result = config.saveToString();
- String expected = "# This is a sample\n# header.\n" + getTestValuesString();
-
- assertEquals(expected, result);
- }
-
- @Test
- public void testSaveToStringWithLongHeader() {
- YamlConfiguration config = getConfig();
- config.options().header("This is a sample\nheader.\n\nNewline above should be commented.\n\n");
-
- for (Map.Entry<String, Object> entry : getTestValues().entrySet()) {
- config.set(entry.getKey(), entry.getValue());
- }
-
- String result = config.saveToString();
- String expected = "# This is a sample\n# header.\n# \n# Newline above should be commented.\n\n\n" + getTestValuesString();
-
- assertEquals(expected, result);
- }
-
- @Test
- public void testParseHeader() throws Exception {
- YamlConfiguration config = getConfig();
- Map<String, Object> values = getTestValues();
- String saved = getTestValuesString();
- String header = "# This is a sample\n# header.\n# \n# Newline above should be commented.\n\n\n";
- String expected = "This is a sample\nheader.\n\nNewline above should be commented.\n\n";
-
- config.loadFromString(header + saved);
-
- assertEquals(expected, config.options().header());
-
- for (Map.Entry<String, Object> entry : values.entrySet()) {
- assertEquals(entry.getValue(), config.get(entry.getKey()));
- }
-
- assertEquals(values.keySet(), config.getKeys(true));
- }
-
- @Test
public void testSaveToStringWithIndent() {
YamlConfiguration config = getConfig();
config.options().indent(9);