package sk.stuba.fiit.perconik.data.content; import java.util.Iterator; import java.util.List; import com.google.common.base.Joiner; import com.google.common.base.Predicate; import com.google.common.base.Splitter; import static java.util.Arrays.asList; import static com.google.common.base.Preconditions.checkState; import static com.google.common.base.Predicates.not; import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Iterators.filter; import static com.google.common.collect.Lists.asList; import static sk.stuba.fiit.perconik.data.content.StructuredContent.separator; import static sk.stuba.fiit.perconik.utilities.MorePreconditions.checkNotNullOrEmpty; import static sk.stuba.fiit.perconik.utilities.MoreStrings.isNullOrEmptyPredicate; public class StructuredContents { private static final Joiner joiner = Joiner.on(separator); private static final Predicate<String> filter = not(isNullOrEmptyPredicate()); private static final Splitter splitter = Splitter.on(separator).trimResults().omitEmptyStrings(); private StructuredContents() {} public static String key(final String component) { return checkNotNullOrEmpty(component); } public static String key(final String first, final String second, final String ... rest) { return key(asList(first, second, rest)); } public static String key(final String[] components) { return key(asList(components)); } public static String key(final Iterable<String> components) { return checkNotNullOrEmpty(joiner.join(filter(components, filter))); } public static String key(final Iterator<String> components) { return checkNotNullOrEmpty(joiner.join(filter(components, filter))); } public static List<String> sequence(final CharSequence key) { List<String> components = splitter.splitToList(key); checkState(!components.isEmpty()); return components; } }