/*
*
* SchemaCrawler
* http://sourceforge.net/projects/schemacrawler
* Copyright (c) 2000-2012, Sualeh Fatehi.
*
* This library is free software; you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Foundation;
* either version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307, USA.
*
*/
package schemacrawler.tools.analysis.associations;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import schemacrawler.schema.ColumnMap;
import schemacrawler.schema.Table;
public class SimpleWeakAssociationsCollector
implements WeakAssociationsCollector
{
public static final ColumnMap[] getWeakAssociations(final Table table)
{
if (table == null)
{
return null;
}
final Set<ColumnMap> weakAssociations = table
.getAttribute(WEAK_ASSOCIATIONS_KEY, new HashSet<ColumnMap>());
final ColumnMap[] tableWeakAssociations = weakAssociations
.toArray(new ColumnMap[weakAssociations.size()]);
Arrays.sort(tableWeakAssociations);
return tableWeakAssociations;
}
private final Set<ColumnMap> weakAssociations;
public SimpleWeakAssociationsCollector()
{
weakAssociations = new HashSet<ColumnMap>();
}
@Override
public void addWeakAssociation(final ColumnMap weakAssociation)
{
if (weakAssociation != null)
{
weakAssociations.add(weakAssociation);
addWeakAssociation(weakAssociation.getPrimaryKeyColumn().getParent(),
weakAssociation);
addWeakAssociation(weakAssociation.getForeignKeyColumn().getParent(),
weakAssociation);
}
}
@Override
public void clear()
{
weakAssociations.clear();
}
@Override
public boolean isEmpty()
{
return weakAssociations.isEmpty();
}
@Override
public Iterator<ColumnMap> iterator()
{
return weakAssociations.iterator();
}
@Override
public int size()
{
return weakAssociations.size();
}
@Override
public ColumnMap[] toArray()
{
return weakAssociations.toArray(new ColumnMap[weakAssociations.size()]);
}
private void addWeakAssociation(final Table table,
final ColumnMap weakAssociation)
{
if (table != null && weakAssociation != null)
{
weakAssociations.add(weakAssociation);
final Collection<ColumnMap> tableWeakAssociations = table
.getAttribute(WEAK_ASSOCIATIONS_KEY, new HashSet<ColumnMap>());
tableWeakAssociations.add(weakAssociation);
table.setAttribute(WEAK_ASSOCIATIONS_KEY, tableWeakAssociations);
}
}
}