/* * Copyright (c) Paul Kinnucan 2003. All Rights Reserved. * * $Revision: 1.2 $ * $Date: 2003/09/08 03:42:17 $ * * SignatureContainer is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2, or (at * your option) any later version. * * SignatureContainer 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 * General Public License for more details. * * To obtain a copy of the GNU General Public License write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ package jde.wizards; import java.util.Hashtable; import java.util.Vector; import java.util.Enumeration; /** * A container for method signatures. The signatures are stored in * vectors with their declaring classes as keys in a hashtable. This * allows them to be pulled out in groups when we print, and keeping * the declaring class info lets us put in comments about where the * method (or method group) comes from. * * @author Martin Schwamberger * @version $Revision: 1.2 $ */ public class SignatureContainer { /** * A table with declaring classes as keys and vectors of method * signatures as values */ private Hashtable classes = new Hashtable(); /** * Adds a signature to the container. Signatures are not * added if they're already registered because we do not want * duplicate method implementations even though a class might * implement interfaces that inherit from some common * super-interface. * * @param sig Signature to be stored in the signature table. */ public final void add(Signature sig) { // There can be only one, even though declaring classes differ. if (!alreadyStored(sig)) { String declaring = sig.getDeclaringClass().getName(); if (classes.containsKey(declaring)) { ((Vector) classes.get(declaring)).addElement(sig); } else { Vector v = new Vector(); v.addElement(sig); classes.put(declaring, v); } } } /** * Check whether container already contains signature. * * @param sig a Signature value * @return a boolean value */ private final boolean alreadyStored(Signature sig) { Enumeration declaringClasses = classes.keys(); boolean found = false; while (declaringClasses.hasMoreElements() && !found) { String interf = (String) declaringClasses.nextElement(); Vector v = (Vector) classes.get(interf); found = v.contains(sig); } return found; } /** * Clear the signature container. */ public void clear() { classes.clear(); } /** * True if this container is empty of signatures. * * @return a boolean value */ public boolean isEmpty() { return classes.isEmpty(); } /** * Visit each signature in the container. * * @param visitor the SignatureVisitor object visiting the signatures */ public void visit(SignatureVisitor visitor) { Enumeration declaringClasses = classes.keys(); while (declaringClasses.hasMoreElements()) { String className = (String) declaringClasses.nextElement(); Vector v = (Vector) classes.get(className); boolean firstOfClass = true; Enumeration e = v.elements(); while (e.hasMoreElements()) { Signature sig = (Signature) e.nextElement(); visitor.visit(sig, firstOfClass); firstOfClass = false; } } } } /* * $Log: SignatureContainer.java,v $ * Revision 1.2 2003/09/08 03:42:17 paulk * Remove DOS line endings. * * Revision 1.1 2003/09/07 05:32:01 paulk * Initial revision. * */ // End of SignatureContainer.java