/* * Hibernate, Relational Persistence for Idiomatic Java * * Copyright (c) 2011, Red Hat Inc. or third-party contributors as * indicated by the @author tags or express copyright attribution * statements applied by the authors. All third-party contributions are * distributed under license by Red Hat Inc. * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.hibernate.metamodel.source.internal; import javax.persistence.SharedCacheMode; import org.hibernate.cache.spi.access.AccessType; import org.hibernate.cfg.AvailableSettings; import org.hibernate.cfg.EJB3NamingStrategy; import org.hibernate.cfg.NamingStrategy; import org.hibernate.metamodel.Metadata; import org.hibernate.metamodel.MetadataBuilder; import org.hibernate.metamodel.MetadataSourceProcessingOrder; import org.hibernate.metamodel.MetadataSources; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.config.spi.ConfigurationService; /** * @author Steve Ebersole */ public class MetadataBuilderImpl implements MetadataBuilder { private final MetadataSources sources; private final OptionsImpl options; public MetadataBuilderImpl(MetadataSources sources) { this.sources = sources; this.options = new OptionsImpl( sources.getServiceRegistry() ); } @Override public MetadataBuilder with(NamingStrategy namingStrategy) { this.options.namingStrategy = namingStrategy; return this; } @Override public MetadataBuilder with(MetadataSourceProcessingOrder metadataSourceProcessingOrder) { this.options.metadataSourceProcessingOrder = metadataSourceProcessingOrder; return this; } @Override public MetadataBuilder with(SharedCacheMode sharedCacheMode) { this.options.sharedCacheMode = sharedCacheMode; return this; } @Override public MetadataBuilder with(AccessType accessType) { this.options.defaultCacheAccessType = accessType; return this; } @Override public MetadataBuilder withNewIdentifierGeneratorsEnabled(boolean enabled) { this.options.useNewIdentifierGenerators = enabled; return this; } @Override public Metadata buildMetadata() { return new MetadataImpl( sources, options ); } private static class OptionsImpl implements Metadata.Options { private MetadataSourceProcessingOrder metadataSourceProcessingOrder = MetadataSourceProcessingOrder.HBM_FIRST; private NamingStrategy namingStrategy = EJB3NamingStrategy.INSTANCE; private SharedCacheMode sharedCacheMode = SharedCacheMode.ENABLE_SELECTIVE; private AccessType defaultCacheAccessType; private boolean useNewIdentifierGenerators; private boolean globallyQuotedIdentifiers; private String defaultSchemaName; private String defaultCatalogName; public OptionsImpl(ServiceRegistry serviceRegistry) { ConfigurationService configService = serviceRegistry.getService( ConfigurationService.class ); // cache access type defaultCacheAccessType = configService.getSetting( AvailableSettings.DEFAULT_CACHE_CONCURRENCY_STRATEGY, new ConfigurationService.Converter<AccessType>() { @Override public AccessType convert(Object value) { return AccessType.fromExternalName( value.toString() ); } } ); useNewIdentifierGenerators = configService.getSetting( AvailableSettings.USE_NEW_ID_GENERATOR_MAPPINGS, new ConfigurationService.Converter<Boolean>() { @Override public Boolean convert(Object value) { return Boolean.parseBoolean( value.toString() ); } }, false ); defaultSchemaName = configService.getSetting( AvailableSettings.DEFAULT_SCHEMA, new ConfigurationService.Converter<String>() { @Override public String convert(Object value) { return value.toString(); } }, null ); defaultCatalogName = configService.getSetting( AvailableSettings.DEFAULT_CATALOG, new ConfigurationService.Converter<String>() { @Override public String convert(Object value) { return value.toString(); } }, null ); globallyQuotedIdentifiers = configService.getSetting( AvailableSettings.GLOBALLY_QUOTED_IDENTIFIERS, new ConfigurationService.Converter<Boolean>() { @Override public Boolean convert(Object value) { return Boolean.parseBoolean( value.toString() ); } }, false ); } @Override public MetadataSourceProcessingOrder getMetadataSourceProcessingOrder() { return metadataSourceProcessingOrder; } @Override public NamingStrategy getNamingStrategy() { return namingStrategy; } @Override public AccessType getDefaultAccessType() { return defaultCacheAccessType; } @Override public SharedCacheMode getSharedCacheMode() { return sharedCacheMode; } @Override public boolean useNewIdentifierGenerators() { return useNewIdentifierGenerators; } @Override public boolean isGloballyQuotedIdentifiers() { return globallyQuotedIdentifiers; } @Override public String getDefaultSchemaName() { return defaultSchemaName; } @Override public String getDefaultCatalogName() { return defaultCatalogName; } } }