/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.boot.model.process.internal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.jaxb.spi.Binding;
import org.hibernate.boot.model.process.spi.ManagedResources;
import org.hibernate.boot.spi.MetadataBuildingOptions;
import org.hibernate.cfg.AttributeConverterDefinition;
/**
* @author Steve Ebersole
*/
public class ManagedResourcesImpl implements ManagedResources {
private Map<Class, AttributeConverterDefinition> attributeConverterDefinitionMap = new HashMap<Class,AttributeConverterDefinition>();
private Set<Class> annotatedClassReferences = new LinkedHashSet<Class>();
private Set<String> annotatedClassNames = new LinkedHashSet<String>();
private Set<String> annotatedPackageNames = new LinkedHashSet<String>();
private List<Binding> mappingFileBindings = new ArrayList<Binding>();
public static ManagedResourcesImpl baseline(MetadataSources sources, MetadataBuildingOptions metadataBuildingOptions) {
final ManagedResourcesImpl impl = new ManagedResourcesImpl();
for ( AttributeConverterDefinition attributeConverterDefinition : metadataBuildingOptions.getAttributeConverters() ) {
impl.addAttributeConverterDefinition( attributeConverterDefinition );
}
impl.annotatedClassReferences.addAll( sources.getAnnotatedClasses() );
impl.annotatedClassNames.addAll( sources.getAnnotatedClassNames() );
impl.annotatedPackageNames.addAll( sources.getAnnotatedPackages() );
impl.mappingFileBindings.addAll( sources.getXmlBindings() );
return impl;
}
private ManagedResourcesImpl() {
}
@Override
public Collection<AttributeConverterDefinition> getAttributeConverterDefinitions() {
return Collections.unmodifiableCollection( attributeConverterDefinitionMap.values() );
}
@Override
public Collection<Class> getAnnotatedClassReferences() {
return Collections.unmodifiableSet( annotatedClassReferences );
}
@Override
public Collection<String> getAnnotatedClassNames() {
return Collections.unmodifiableSet( annotatedClassNames );
}
@Override
public Collection<String> getAnnotatedPackageNames() {
return Collections.unmodifiableSet( annotatedPackageNames );
}
@Override
public Collection<Binding> getXmlMappingBindings() {
return Collections.unmodifiableList( mappingFileBindings );
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// package private
void addAttributeConverterDefinition(AttributeConverterDefinition attributeConverterDefinition) {
attributeConverterDefinitionMap.put(
attributeConverterDefinition.getAttributeConverter().getClass(),
attributeConverterDefinition
);
}
void addAnnotatedClassReference(Class annotatedClassReference) {
annotatedClassReferences.add( annotatedClassReference );
}
void addAnnotatedClassName(String annotatedClassName) {
annotatedClassNames.add( annotatedClassName );
}
void addAnnotatedPackageName(String annotatedPackageName) {
annotatedPackageNames.add( annotatedPackageName );
}
void addXmlBinding(Binding binding) {
mappingFileBindings.add( binding );
}
}