/* * * 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.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import schemacrawler.schema.ColumnReference; import schemacrawler.schema.Table; public class SimpleWeakAssociationsCollector implements WeakAssociationsCollector { public static final List<ColumnReference> getWeakAssociations(final Table table) { if (table == null) { return null; } final Set<ColumnReference> weakAssociations = table .getAttribute(WEAK_ASSOCIATIONS_KEY, new HashSet<ColumnReference>()); final List<ColumnReference> weakAssociationsList = new ArrayList<ColumnReference>(weakAssociations); Collections.sort(weakAssociationsList); return weakAssociationsList; } private final Set<ColumnReference> weakAssociations; public SimpleWeakAssociationsCollector() { weakAssociations = new HashSet<ColumnReference>(); } @Override public void addWeakAssociation(final ColumnReference 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 Collection<ColumnReference> getCollection() { return new HashSet<ColumnReference>(weakAssociations); } @Override public boolean isEmpty() { return weakAssociations.isEmpty(); } @Override public Iterator<ColumnReference> iterator() { return weakAssociations.iterator(); } @Override public int size() { return weakAssociations.size(); } private void addWeakAssociation(final Table table, final ColumnReference weakAssociation) { if (table != null && weakAssociation != null) { weakAssociations.add(weakAssociation); final Collection<ColumnReference> tableWeakAssociations = table .getAttribute(WEAK_ASSOCIATIONS_KEY, new HashSet<ColumnReference>()); tableWeakAssociations.add(weakAssociation); table.setAttribute(WEAK_ASSOCIATIONS_KEY, tableWeakAssociations); } } }