in sdk/src/main/java/com/google/cloud/dataflow/sdk/util/state/StateNamespaces.java [207:237]
public static <W extends BoundedWindow> StateNamespace fromString(
String stringKey, Coder<W> windowCoder) {
if (!stringKey.startsWith("/") || !stringKey.endsWith("/")) {
throw new RuntimeException("Invalid namespace string: '" + stringKey + "'");
}
if (GlobalNamespace.GLOBAL_STRING.equals(stringKey)) {
return global();
}
List<String> parts = SLASH_SPLITTER.splitToList(stringKey);
if (parts.size() != 3 && parts.size() != 4) {
throw new RuntimeException("Invalid namespace string: '" + stringKey + "'");
}
// Ends should be empty (we start and end with /)
if (!parts.get(0).isEmpty() || !parts.get(parts.size() - 1).isEmpty()) {
throw new RuntimeException("Invalid namespace string: '" + stringKey + "'");
}
try {
W window = CoderUtils.decodeFromBase64(windowCoder, parts.get(1));
if (parts.size() > 3) {
int index = Integer.parseInt(parts.get(2), WindowAndTriggerNamespace.TRIGGER_RADIX);
return windowAndTrigger(windowCoder, window, index);
} else {
return window(windowCoder, window);
}
} catch (Exception e) {
throw new RuntimeException("Invalid namespace string: '" + stringKey + "'", e);
}
}