static GRN parse(String grn, GRNRegistry grnRegistry) {
        final List<String> tokens = SPLITTER.splitToList(grn.toLowerCase(Locale.ENGLISH));

        if (tokens.size() != 6) {
            throw new IllegalArgumentException(String.format(Locale.US, "<%s> is not a valid GRN string", grn));
        }
        if (!tokens.get(0).equals("grn")) {
            throw new IllegalArgumentException(String.format(Locale.US, "<%s> is not a grn scheme", tokens.get(0)));
        }
        final String type = tokens.get(4);
        final Builder builder = grnRegistry.newGRNBuilder(type)
                .cluster(tokens.get(1))
                .tenant(tokens.get(2))
                .scope(tokens.get(3))
                .entity(tokens.get(5));

        return builder.build();
    }
@Test
    public void parse() {
        final String testGRN = "grn::::stream:000000000000000001";
        final GRN grn = GRN.parse(testGRN, GRN_REGISTRY);

        assertEquals(grn.type(), "stream");
        assertEquals(grn.entity(), "000000000000000001");

        assertEquals(grn.toString(), testGRN);
    }