private static HollowObjectSchema parseObjectSchema()

in hollow/src/main/java/com/netflix/hollow/core/schema/HollowSchemaParser.java [108:160]


    private static HollowObjectSchema parseObjectSchema(String typeName, StreamTokenizer tokenizer) throws IOException {
        String keyFieldPaths[] = parsePrimaryKey(tokenizer);
        if (tokenizer.ttype != '{') {
            throw new IOException("Invalid syntax: expecting '{' for '" + typeName + "'");
        }

        int tok = tokenizer.nextToken();
        List<String> tokens = new ArrayList<String>();
        while(tokenizer.ttype != '}') {
            if(tok != StreamTokenizer.TT_WORD)
                throw new IOException("Invalid syntax, expected field type: " + typeName);

            tokens.add(tokenizer.sval);
            tokenizer.nextToken();

            if(tok != StreamTokenizer.TT_WORD)
                throw new IOException("Invalid syntax, expected field name: " + typeName);

            String fieldName = tokenizer.sval;
            tokens.add(fieldName);
            tokenizer.nextToken();

            if(tokenizer.ttype != ';')
                throw new IOException("Invalid syntax, expected semicolon: " + typeName + "." + fieldName);

            tokenizer.nextToken();
        }

        HollowObjectSchema schema = new HollowObjectSchema(typeName, tokens.size() / 2, keyFieldPaths);
        for(int i=0;i<tokens.size();i+=2) {
            String fieldType = tokens.get(i);

            if("int".equals(fieldType)) {
                schema.addField(tokens.get(i+1), FieldType.INT);
            } else if("long".equals(fieldType)) {
                schema.addField(tokens.get(i+1), FieldType.LONG);
            } else if("float".equals(fieldType)) {
                schema.addField(tokens.get(i+1), FieldType.FLOAT);
            } else if("double".equals(fieldType)) {
                schema.addField(tokens.get(i+1), FieldType.DOUBLE);
            } else if("boolean".equals(fieldType)) {
                schema.addField(tokens.get(i+1), FieldType.BOOLEAN);
            } else if("string".equals(fieldType)) {
                schema.addField(tokens.get(i+1), FieldType.STRING);
            } else if("bytes".equals(fieldType)) {
                schema.addField(tokens.get(i+1), FieldType.BYTES);
            } else {
                schema.addField(tokens.get(i+1), FieldType.REFERENCE, fieldType);
            }
        }

        return schema;
    }