All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.electronwill.nightconfig.json.JsonFormat Maven / Gradle / Ivy

Go to download

Powerful, easy-to-use and multi-language configuration library for the JVM - json_android module

There is a newer version: 3.6.6
Show newest version
package com.electronwill.nightconfig.json;

import com.electronwill.nightconfig.core.Config;
import com.electronwill.nightconfig.core.ConfigFormat;
import com.electronwill.nightconfig.core.file.FormatDetector;
import com.electronwill.nightconfig.core.io.ConfigParser;
import com.electronwill.nightconfig.core.io.ConfigWriter;
import com.electronwill.nightconfig.core.utils.WriterSupplier;
import com.electronwill.nightconfig.core.utils.Supplier;

import java.io.IOException;
import java.io.Writer;
import java.util.Map;

/**
 * @author TheElectronWill
 */
public abstract class JsonFormat implements ConfigFormat {

	private static final JsonFormat FANCY = new JsonFormat() {
		@Override
		public FancyJsonWriter createWriter() {
			return new FancyJsonWriter();
		}

		@Override
		public ConfigParser createParser() {
			return new JsonParser(this);
		}
	};
	private static final JsonFormat MINIMAL = new JsonFormat() {
		@Override
		public MinimalJsonWriter createWriter() {
			return new MinimalJsonWriter();
		}

		@Override
		public ConfigParser createParser() {
			return new JsonParser(this);
		}
	};

	/**
	 * @return the unique instance of JsonFormat that creates FancyJsonWriters.
	 */
	public static JsonFormat fancyInstance() {
		return FANCY;
	}

	/**
	 * @return the unique instance of JsonFormat that creates MinimalJsonWriters.
	 */
	public static JsonFormat minimalInstance() {
		return MINIMAL;
	}

	/**
	 * @return an instance of JsonFormat with a parser that accepts empty inputs and a fancy writer
	 */
	public static JsonFormat emptyTolerantInstance() {
		return new JsonFormat() {
			@Override
			public FancyJsonWriter createWriter() {
				return new FancyJsonWriter();
			}

			@Override
			public ConfigParser createParser() {
				return new JsonParser(this).setEmptyDataAccepted(true);
			}
		};
	}

	/**
	 * @return an instance of JsonFormat with a parser that accepts empty inputs and a minimal writer
	 */
	public static JsonFormat minimalEmptyTolerantInstance() {
		return new JsonFormat() {
			@Override
			public MinimalJsonWriter createWriter() {
				return new MinimalJsonWriter();
			}

			@Override
			public ConfigParser createParser() {
				return new JsonParser(this).setEmptyDataAccepted(true);
			}
		};
	}

	/**
	 * @return a new config with the format {@link JsonFormat#fancyInstance()}.
	 */
	public static Config newConfig() {
		return FANCY.createConfig();
	}

	/**
	 * @return a new config with the given map creator
	 */
	public static Config newConfig(Supplier> s) {
		return FANCY.createConfig(s);
	}

	/**
	 * @return a new thread-safe config with the format {@link JsonFormat#fancyInstance()}.
	 */
	public static Config newConcurrentConfig() {
		return FANCY.createConcurrentConfig();
	}

	static {
		FormatDetector.registerExtension("json", FANCY);
	}

	private JsonFormat() {}

	@Override
	public abstract W createWriter();

	@Override
	public abstract ConfigParser createParser();

	@Override
	public Config createConfig(Supplier> mapCreator) {
		return Config.of(mapCreator, this);
	}

	@Override
	public boolean supportsComments() {
		return false;
	}

	@Override
	public void initEmptyFile(WriterSupplier ws) throws IOException {
		try (Writer writer = ws.get()) {
			writer.write("{}");
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy