protected FieldStrategy defaultStrategy()

in openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingRepository.java [839:935]


    protected FieldStrategy defaultStrategy(FieldMapping field,
        boolean installHandlers, boolean adapting) {
        // not persistent?
        if (field.getManagement() != FieldMetaData.MANAGE_PERSISTENT
            || field.isVersion())
            return NoneFieldStrategy.getInstance();
        if (field.getDefiningMapping().getStrategy() ==
            NoneClassStrategy.getInstance())
            return NoneFieldStrategy.getInstance();

        // check for named handler first
        ValueHandler handler = namedHandler(field);
        if (handler != null) {
            if (installHandlers)
                field.setHandler(handler);
            return new HandlerFieldStrategy();
        }

        // check for an explicitly mapped strategy
        Object explicitStrat = mappedStrategy(field, field.getType(), adapting);
        if (explicitStrat != null) {
            if (explicitStrat instanceof FieldStrategy)
                return (FieldStrategy) explicitStrat;
            if (explicitStrat != null) {
                if (installHandlers)
                    field.setHandler((ValueHandler) explicitStrat);
                return new HandlerFieldStrategy();
            }
        }

        if (field.isSerialized()) {
            if (_dict.maxEmbeddedBlobSize != -1) {
                handler = defaultHandler(field, adapting);
                if (handler != null) {
                    if (installHandlers)
                        field.setHandler(handler);
                }
                return new MaxEmbeddedBlobFieldStrategy();
            }
        }

        // check for known field strategies
        if (!field.isSerialized() && (field.getType() == byte[].class
            || field.getType() == Byte[].class)) {
            if (_dict.maxEmbeddedBlobSize != -1) {
                handler = defaultHandler(field, adapting);
                if (handler != null) {
                    if (installHandlers)
                        field.setHandler(handler);
                }
                return new MaxEmbeddedByteArrayFieldStrategy();
            }
        } else if (!field.isSerialized()
            && (field.getType() == char[].class
            || field.getType() == Character[].class)) {
            if (_dict.maxEmbeddedClobSize != -1 && isClob(field, false)) {
                handler = defaultHandler(field, adapting);
                if (handler != null) {
                    if (installHandlers)
                        field.setHandler(handler);
                }
                return new MaxEmbeddedCharArrayFieldStrategy();
            }
        } else if (!field.isSerialized()) {
            FieldStrategy strat = defaultTypeStrategy(field, installHandlers,
                adapting);
            if (strat != null) {
                handler = defaultHandler(field, adapting);
                if (handler != null) {
                    if (installHandlers)
                        field.setHandler(handler);
                }
                return strat;
            }
        }

        // check for default handler
        handler = defaultHandler(field, adapting);
        if (handler != null) {
            if (installHandlers)
                field.setHandler(handler);
            return new HandlerFieldStrategy();
        }

        // default to blob
        if (installHandlers) {
            if (getLog().isWarnEnabled())
                getLog().warn(_loc.get("no-field-strategy", field));
            field.setSerialized(true);
        }
        if (_dict.maxEmbeddedBlobSize == -1) {
            if (installHandlers)
                field.setHandler(BlobValueHandler.getInstance());
            return new HandlerFieldStrategy();
        }
        return new MaxEmbeddedBlobFieldStrategy();
    }