/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package pluginbase.bukkit.properties;
import com.google.common.io.Files;
import org.apache.commons.lang.Validate;
import org.bukkit.configuration.InvalidConfigurationException;
import org.jetbrains.annotations.NotNull;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.charset.IllegalCharsetNameException;
class EncodedYamlConfiguration extends CommentedYamlConfiguration {
@NotNull
private final Charset charset;
EncodedYamlConfiguration(@NotNull final Charset charset, final boolean doComments) throws UnsupportedEncodingException {
super(doComments);
this.charset = charset;
}
EncodedYamlConfiguration(@NotNull final String charset, final boolean doComments) throws UnsupportedEncodingException, IllegalCharsetNameException {
this(Charset.forName(charset), doComments);
}
@Override
public void load(@NotNull final InputStream stream) throws IOException, InvalidConfigurationException {
Validate.notNull(stream, "Stream cannot be null");
InputStreamReader reader = new InputStreamReader(stream, charset);
StringBuilder builder = new StringBuilder();
BufferedReader input = new BufferedReader(reader);
try {
String line;
while ((line = input.readLine()) != null) {
builder.append(line);
builder.append('\n');
}
} finally {
input.close();
}
loadFromString(builder.toString());
}
@Override
public void save(@NotNull final File file) throws IOException {
Files.createParentDirs(file);
final String data = saveToString();
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), charset));
writer.write(data);
} finally {
if (writer != null) {
writer.close();
}
}
}
}