/*
* 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()
);
}
}