/* * 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.source.spi; import java.util.Collection; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import org.hibernate.mapping.MetaAttribute; /** * Represents a collection of "tooling hints" ({@code <meta/>} mapping info) keyed by a name. * <p/> * NOTE : historically these were called "meta attributes", but as these are values used solely * by external tooling it was decided to begin calling them tooling hints. For temporary * backwards compatibility (temporary until we move away from o.h.mapping model) you will * see mixed usage. * * @author Steve Ebersole */ public class ToolingHintContext { private final ConcurrentMap<String, ToolingHint> toolingHintMap = new ConcurrentHashMap<String, ToolingHint>(); public ToolingHintContext(ToolingHintContext baseline) { if ( baseline == null ) { return; } for ( ToolingHint toolingHint : baseline.toolingHintMap.values() ) { if ( toolingHint.isInheritable() ) { toolingHintMap.put( toolingHint.getName(), toolingHint ); } } } public Collection<ToolingHint> getToolingHints() { return toolingHintMap.values(); } public Iterable<String> getKeys() { return toolingHintMap.keySet(); } public ToolingHint getToolingHint(String key) { return toolingHintMap.get( key ); } public void add(ToolingHint toolingHint) { toolingHintMap.put( toolingHint.getName(), toolingHint ); } /** * The {@link org.hibernate.mapping} package accepts these as a Map, so for now * expose the underlying Map. But we unfortunately need to collect a Map... * * @return The underlying Map */ public Map<String,MetaAttribute> getMetaAttributeMap() { final Map<String,MetaAttribute> collectedAttributeMap = new ConcurrentHashMap<String, MetaAttribute>(); for ( ToolingHint toolingHint : toolingHintMap.values() ) { collectedAttributeMap.put( toolingHint.getName(), toolingHint.asMetaAttribute() ); } return collectedAttributeMap; } }