package fr.openwide.core.commons.util.functional;
import java.util.Locale;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import fr.openwide.core.commons.util.functional.SerializableFunction;
public final class Joiners {
private static final Joiner SPACE = Joiner.on(" ").skipNulls();
private static final Joiner NON_BREAKING_SPACE = Joiner.on("\u00A0").skipNulls();
private static final Joiner NEW_LINE = Joiner.on("\n").skipNulls();
private static final Joiner NEW_LINE_SEMICOLON = Joiner.on(" ;\n").skipNulls();
private static final Joiner HYPHEN = Joiner.on("-").skipNulls();
private static final Joiner HYPHEN_SPACE = Joiner.on(" - ").skipNulls();
private static final Joiner MIDDOT_SPACE = Joiner.on(" ยท ").skipNulls();
private static final Joiner DOT = Joiner.on(".").skipNulls();
private static final Joiner SLASH = Joiner.on("/").skipNulls();
private static final Joiner COMMA = Joiner.on(", ").skipNulls();
public static Joiner onSpace() {
return SPACE;
}
public static Joiner onNonBreakingSpace() {
return NON_BREAKING_SPACE;
}
public static Joiner onNewLine() {
return NEW_LINE;
}
public static Joiner onNewLineSemicolon() {
return NEW_LINE_SEMICOLON;
}
public static Joiner onHyphen() {
return HYPHEN;
}
public static Joiner onHyphenSpace() {
return HYPHEN_SPACE;
}
public static Joiner onMiddotSpace() {
return MIDDOT_SPACE;
}
public static Joiner onDot() {
return DOT;
}
public static Joiner onSlash() {
return SLASH;
}
public static Joiner onComma() {
return COMMA;
}
/**
* Utility functions for places where we need a serializable reference to a {@link Joiner}.
* <p>These are functions, and not suppliers, because in most places a
* <code>Function<? super Locale, ? extends Joiner></code> is required (which would allow the function
* to return a different {@link Joiner} depending on the {@link Locale}.
*/
public static final class Functions {
private static final Function<Object, Joiner> SPACE = new SerializableFunction<Object, Joiner>() {
private static final long serialVersionUID = 1L;
@Override
public Joiner apply(Object input) {
return Joiners.SPACE;
}
};
private static final Function<Object, Joiner> NON_BREAKING_SPACE = new SerializableFunction<Object, Joiner>() {
private static final long serialVersionUID = 1L;
@Override
public Joiner apply(Object input) {
return Joiners.NON_BREAKING_SPACE;
}
};
private static final Function<Object, Joiner> NEW_LINE = new SerializableFunction<Object, Joiner>() {
private static final long serialVersionUID = 1L;
@Override
public Joiner apply(Object input) {
return Joiners.NEW_LINE;
}
};
private static final Function<Object, Joiner> NEW_LINE_SEMICOLON = new SerializableFunction<Object, Joiner>() {
private static final long serialVersionUID = 1L;
@Override
public Joiner apply(Object input) {
return Joiners.NEW_LINE_SEMICOLON;
}
};
private static final Function<Object, Joiner> HYPHEN = new SerializableFunction<Object, Joiner>() {
private static final long serialVersionUID = 1L;
@Override
public Joiner apply(Object input) {
return Joiners.HYPHEN;
}
};
private static final Function<Object, Joiner> HYPHEN_SPACE = new SerializableFunction<Object, Joiner>() {
private static final long serialVersionUID = 1L;
@Override
public Joiner apply(Object input) {
return Joiners.HYPHEN_SPACE;
}
};
private static final Function<Object, Joiner> MIDDOT_SPACE = new SerializableFunction<Object, Joiner>() {
private static final long serialVersionUID = 1L;
@Override
public Joiner apply(Object input) {
return Joiners.MIDDOT_SPACE;
}
};
private static final Function<Object, Joiner> DOT = new SerializableFunction<Object, Joiner>() {
private static final long serialVersionUID = 1L;
@Override
public Joiner apply(Object input) {
return Joiners.DOT;
}
};
private static final Function<Object, Joiner> SLASH = new SerializableFunction<Object, Joiner>() {
private static final long serialVersionUID = 1L;
@Override
public Joiner apply(Object input) {
return Joiners.SLASH;
}
};
private static final Function<Object, Joiner> COMMA = new SerializableFunction<Object, Joiner>() {
private static final long serialVersionUID = 1L;
@Override
public Joiner apply(Object input) {
return Joiners.COMMA;
}
};
public static Function<Object, Joiner> onSpace() {
return SPACE;
}
public static Function<Object, Joiner> onNonBreakingSpace() {
return NON_BREAKING_SPACE;
}
public static Function<Object, Joiner> onNewLine() {
return NEW_LINE;
}
public static Function<Object, Joiner> onNewLineSemicolon() {
return NEW_LINE_SEMICOLON;
}
public static Function<Object, Joiner> onHyphen() {
return HYPHEN;
}
public static Function<Object, Joiner> onHyphenSpace() {
return HYPHEN_SPACE;
}
public static Function<Object, Joiner> onMiddotSpace() {
return MIDDOT_SPACE;
}
public static Function<Object, Joiner> onDot() {
return DOT;
}
public static Function<Object, Joiner> onSlash() {
return SLASH;
}
public static Function<Object, Joiner> onComma() {
return COMMA;
}
private Functions() {
}
}
private Joiners() {
}
}