com.github.javafaker.service.FakeValues Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of javafaker Show documentation
Show all versions of javafaker Show documentation
This library is a port of Ruby's stympy/faker gem (as well as Perl's Data::Faker library) that generates fake data.
It's useful when you're developing a new project and need some pretty data for showcase.
package com.github.javafaker.service;
import org.yaml.snakeyaml.Yaml;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Map;
public class FakeValues implements FakeValuesInterface {
private final Locale locale;
private final String filename;
private final String path;
private Map values;
FakeValues(Locale locale) {
this(locale, getFilename(locale), getFilename(locale));
}
private static String getFilename(Locale locale) {
final StringBuilder filename = new StringBuilder(language(locale));
if (!"".equals(locale.getCountry())) {
filename.append("-").append(locale.getCountry());
}
return filename.toString();
}
/**
* If you new up a locale with "he", it gets converted to "iw" which is old.
* This addresses that unfortunate condition.
*/
private static String language(Locale l) {
if (l.getLanguage().equals("iw")) {
return "he";
}
return l.getLanguage();
}
FakeValues(Locale locale, String filename, String path) {
this.locale = locale;
this.filename = filename;
this.path = path;
}
@Override
public Map get(String key) {
if (values == null) {
values = loadValues();
}
return values == null ? null : (Map) values.get(key);
}
private Map loadValues() {
String pathWithLocaleAndFilename = "/" + locale.getLanguage() + "/" + this.filename;
String pathWithFilename = "/" + filename + ".yml";
String pathWithLocale = "/" + locale.getLanguage() + ".yml";
List paths = Arrays.asList(pathWithLocaleAndFilename, pathWithFilename, pathWithLocale);
InputStream stream = null;
for (String path : paths) {
stream = findStream(path);
if (stream != null) {
break;
}
}
if (stream == null) {
return null;
}
final Map valuesMap = new Yaml().loadAs(stream, Map.class);
Map localeBased = (Map) valuesMap.get(locale.getLanguage());
if (localeBased == null) {
localeBased = (Map) valuesMap.get(filename);
}
return (Map) localeBased.get("faker");
}
private InputStream findStream(String filename) {
InputStream streamOnClass = getClass().getResourceAsStream(filename);
if (streamOnClass != null) {
return streamOnClass;
}
return getClass().getClassLoader().getResourceAsStream(filename);
}
boolean supportsPath(String path) {
return this.path.equals(path);
}
}