/*
* Copyright (c) 2017 OBiBa. All rights reserved.
*
* This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.obiba.magma.datasource.csv.support;
import java.util.Arrays;
import javax.validation.constraints.NotNull;
import com.google.common.collect.ImmutableList;
public class Separator {
public static final Separator COMMA = new Separator(',');
public static final Separator SEMICOLON = new Separator(';');
public static final Separator COLON = new Separator(':');
public static final Separator TAB = new Separator('\t', "\\t", "tab");
private final char separator;
private final String[] acceptable;
public Separator(char separator, String... from) {
this.separator = separator;
acceptable = from != null ? Arrays.copyOf(from, from.length + 1) : new String[1];
acceptable[acceptable.length - 1] = String.valueOf(separator);
}
public char getCharacter() {
return separator;
}
public static Separator fromString(String value) {
if(value == null) throw new IllegalArgumentException("value cannot be null");
for(Separator separator : ImmutableList.of(COMMA, SEMICOLON, COLON, TAB)) {
if(isOneOf(value, separator.acceptable)) {
return separator;
}
}
if(value.length() == 1) {
return new Separator(value.charAt(0));
}
throw new IllegalArgumentException("separator must be one character");
}
private static boolean isOneOf(@NotNull String value, @NotNull String... strings) {
for(String str : strings) {
if(value.contains(str)) {
return true;
}
}
return false;
}
}