/* * Hibernate OGM, Domain model persistence for NoSQL datastores * * 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.ogm.dialect.impl; import java.util.Collections; import java.util.List; import java.util.Map; import org.hibernate.ogm.dialect.spi.TupleTypeContext; import org.hibernate.ogm.model.key.spi.AssociatedEntityKeyMetadata; import org.hibernate.ogm.options.spi.OptionsContext; import org.hibernate.ogm.util.impl.StringHelper; /** * Represents all information used to load an entity with some specific characteristics like a projection * * @author Guillaume Scheibel <guillaume.scheibel@gmail.com> * @author Gunnar Morling */ public class TupleTypeContextImpl implements TupleTypeContext { private final List<String> selectableColumns; private final OptionsContext optionsContext; private final String discriminatorColumn; private final Object discriminatorValue; /** * Information of the associated entity stored per foreign key column names */ private final Map<String, AssociatedEntityKeyMetadata> associatedEntityMetadata; private final Map<String, String> roles; public TupleTypeContextImpl(List<String> selectableColumns, Map<String, AssociatedEntityKeyMetadata> associatedEntityMetadata, Map<String, String> roles, OptionsContext optionsContext, String discriminatorColumn, Object discriminatorValue) { this.selectableColumns = Collections.unmodifiableList( selectableColumns ); this.associatedEntityMetadata = Collections.unmodifiableMap( associatedEntityMetadata ); this.roles = Collections.unmodifiableMap( roles ); this.optionsContext = optionsContext; this.discriminatorColumn = discriminatorColumn; this.discriminatorValue = discriminatorValue; } @Override public List<String> getSelectableColumns() { return selectableColumns; } @Override public OptionsContext getOptionsContext() { return optionsContext; } @Override public boolean isPartOfAssociation(String column) { return associatedEntityMetadata.containsKey( column ); } @Override public AssociatedEntityKeyMetadata getAssociatedEntityKeyMetadata(String column) { return associatedEntityMetadata.get( column ); } @Override public Map<String, AssociatedEntityKeyMetadata> getAllAssociatedEntityKeyMetadata() { return associatedEntityMetadata; } @Override public String getRole(String column) { return roles.get( column ); } @Override public Map<String, String> getAllRoles() { return roles; } @Override public String getDiscriminatorColumn() { return discriminatorColumn; } @Override public Object getDiscriminatorValue() { return discriminatorValue; } @Override public String toString() { final StringBuilder builder = new StringBuilder( "Tuple Context {" ); builder.append( "selectableColumns: [" ); builder.append( StringHelper.join( selectableColumns, ", " ) ); builder.append( "] }" ); return builder.toString(); } }