/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * Copyright (c) 2010, 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.mapping;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.hibernate.internal.util.collections.JoinedIterator;

Author:Gavin King
/** * @author Gavin King */
public class DenormalizedTable extends Table { private final Table includedTable; public DenormalizedTable(Table includedTable) { this.includedTable = includedTable; includedTable.setHasDenormalizedTables(); } @Override public void createForeignKeys() { includedTable.createForeignKeys(); Iterator iter = includedTable.getForeignKeyIterator(); while ( iter.hasNext() ) { ForeignKey fk = (ForeignKey) iter.next(); createForeignKey( Constraint.generateName( fk.generatedConstraintNamePrefix(), this, fk.getColumns() ), fk.getColumns(), fk.getReferencedEntityName(), fk.getReferencedColumns() ); } } @Override public Column getColumn(Column column) { Column superColumn = super.getColumn( column ); if (superColumn != null) { return superColumn; } else { return includedTable.getColumn( column ); } } @Override public Iterator getColumnIterator() { return new JoinedIterator( includedTable.getColumnIterator(), super.getColumnIterator() ); } @Override public boolean containsColumn(Column column) { return super.containsColumn(column) || includedTable.containsColumn(column); } @Override public PrimaryKey getPrimaryKey() { return includedTable.getPrimaryKey(); } @Override public Iterator getUniqueKeyIterator() { Iterator iter = includedTable.getUniqueKeyIterator(); while ( iter.hasNext() ) { UniqueKey uk = (UniqueKey) iter.next(); createUniqueKey( uk.getColumns() ); } return getUniqueKeys().values().iterator(); } @Override public Iterator getIndexIterator() { List indexes = new ArrayList(); Iterator iter = includedTable.getIndexIterator(); while ( iter.hasNext() ) { Index parentIndex = (Index) iter.next(); Index index = new Index(); index.setName( getName() + parentIndex.getName() ); index.setTable(this); index.addColumns( parentIndex.getColumnIterator() ); indexes.add( index ); } return new JoinedIterator( indexes.iterator(), super.getIndexIterator() ); } }