package com.netflix.suro.sink.remotefile.formatter; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.netflix.suro.sink.remotefile.RemotePrefixFormatter; import java.util.ArrayList; import java.util.List; public class DynamicRemotePrefixFormatter implements RemotePrefixFormatter { public static final String TYPE = "dynamic"; private final List<PrefixFormatter> formatterList = new ArrayList<PrefixFormatter>(); @JsonCreator public DynamicRemotePrefixFormatter(@JsonProperty("format") String formatString) { String[] formatList = formatString.split(";"); for (String format : formatList) { formatterList.add(createFormatter(format)); } } @Override public String get() { StringBuilder sb = new StringBuilder(); for (PrefixFormatter formatter : formatterList) { sb.append(formatter.format()).append('/'); } return sb.toString(); } public static PrefixFormatter createFormatter(String formatString) { int startBracket = formatString.indexOf('('); int endBracket = formatString.lastIndexOf(')'); String name = formatString.substring(0, startBracket); String param = formatString.substring(startBracket + 1, endBracket); if (name.equals("date")) { return new DatePrefixFormatter(param); } else if (name.equals("static")) { return new StaticPrefixFormatter(param); } else if (name.equals("property")) { return new PropertyPrefixFormatter(param); } else { throw new IllegalArgumentException(name + " cannot be supported"); } } }