protected boolean instanceOf()

in contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/storage/avro/PigAvroDatumWriter.java [137:210]


    protected boolean instanceOf(Schema schema, Object datum)
                                    throws IOException {

        try {
            switch (schema.getType()) {
            case RECORD:
                if (datum instanceof Tuple) {
                    Tuple tuple = (Tuple) datum;
                    List<Field> fields = schema.getFields();
                    if (fields.size() != tuple.size()) {
                        return false;
                    }
                    for (int i = 0; i < fields.size(); i++) {
                        if (!instanceOf(fields.get(i).schema(), tuple.get(i)))
                            return false;
                    }
                    return true;
                }
                return false;

            case UNION:
                @SuppressWarnings("unused")
                int index = resolveUnionSchema(schema, datum);
                return true;
            case ENUM:
                return datum instanceof String && schema.hasEnumSymbol(((String) datum))
                            || unwrappedInstanceOf(schema, datum);
            case ARRAY:
                return datum instanceof DataBag
                            ||  unwrappedInstanceOf(schema, datum);
            case MAP:
                return datum instanceof Map
                            || unwrappedInstanceOf(schema, datum);
            case FIXED:
                return datum instanceof DataByteArray && ((DataByteArray) datum).size() == schema.getFixedSize()
                            || unwrappedInstanceOf(schema, datum);
            case STRING:
                return datum instanceof String
                            || unwrappedInstanceOf(schema, datum);
            case BYTES:
                return datum instanceof DataByteArray
                            || unwrappedInstanceOf(schema, datum);
            case INT:
                return datum instanceof Integer
                            || unwrappedInstanceOf(schema, datum);
            case LONG:
                return datum instanceof Long
                            || datum instanceof Integer
                            || unwrappedInstanceOf(schema, datum);
            case FLOAT:
                return datum instanceof Float
                            || datum instanceof Integer
                            || datum instanceof Long
                            || unwrappedInstanceOf(schema, datum);
            case DOUBLE:
                return datum instanceof Double
                            || datum instanceof Float
                            || datum instanceof Integer
                            || datum instanceof Long
                            || unwrappedInstanceOf(schema, datum);
            case BOOLEAN:
                return datum instanceof Boolean
                            || datum instanceof Integer
                            || unwrappedInstanceOf(schema, datum);
            case NULL:
                return datum == null;
            default:
                throw new RuntimeException("Unexpected type: " + schema);
            }
        } catch (ExecException e) {
            e.printStackTrace(System.err);
            throw new RuntimeException(e);
        }
    }