/*---------------------------------------------------------------------------
File:         			OperatorFactory.java
Package:                        JFLAP Version 3.1
Author:			        Ted Hung
                                
Description of Contents:	Factory for Operators.
				
--------------------------------------------------------------------------*/

/* 
 * Susan H. Rodger, Magda Procopiuc, Octavian Procopiuc, Eric Gramond, Ted Hung
 * Computer Science Department
 * Duke University
 * August 1999
 * Supported by National Science Foundation DUE-9596002, DUE-9555084,
 *  and DUE-9752583
 *
 * Copyright (c) 1999
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms are permitted
 * provided that the above copyright notice and this paragraph are
 * duplicated in all such forms and that any documentation,
 * advertising materials, and other materials related to such
 * distribution and use acknowledge that the software was developed
 * by the author.  The name of the author may not be used to
 * endorse or promote products derived from this software without
 * specific prior written permission.
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 */

package flap.operators;

import java.util.*;
//
//
// OperatorFactory
//
//
public class OperatorFactory 
{

   Vector operators;

   public OperatorFactory()
   {
      operators = new Vector();
   }

   /**
    * registers an operators so that the factory
    * is able to recognize and produce it
    */
   public void registerOperator(Operator op)
   {
      operators.addElement(op);
   }

   /**
    * creates a new operator depending on the given
    * identifier
    */
   public Operator createOperator(String identifier)
   {
      Operator aOp;

      for(Enumeration e = operators.elements(); e.hasMoreElements(); )
      {
	 aOp = (Operator) e.nextElement();
	 if(identifier.equals(aOp.getIdentifier()))
	 {
	    return (Operator) aOp.Clone();
	 }
      }

      return null;
   }
}

