/*******************************************************************************
 * Copyright (c) 2004, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.wst.command.internal.env.core.fragment;

import java.util.Hashtable;
import org.eclipse.wst.command.internal.env.core.registry.CommandRegistry;


public class ExtensionFragment extends AbstractCommandFragment 
{
  private String[]        ids_;;
  private CommandRegistry extensionRegistry_;
  private Hashtable       fragments_;
  
  /**
   *  The default constructor
   *
   */
  public ExtensionFragment()
  {
    super( null, "" );  
    fragments_ = new Hashtable();
  }
    
  /**
   * Copy constructor.
   * @param Fragment the fragment to copy
   */
  protected ExtensionFragment( ExtensionFragment fragment )
  {
    super( fragment );
    
    ids_               = fragment.ids_;
    extensionRegistry_ = fragment.extensionRegistry_;
    fragments_         = fragment.fragments_;
  }
  
  /**
   * 
   * @param ids Sets the IDs for this extension fragment.
   */
  public void setExtensionIds( String[] ids )
  {
    ids_ = ids;
  }
  
  /**
   * 
   * @param registry Sets the registry for this extension fragment.
   */
  public void setExtensionRegistry( CommandRegistry registry )
  {
    extensionRegistry_ = registry; 
  }
      
  /**
   * @see org.eclipse.wst.command.internal.env.core.fragment.CommandFragment#getFirstSubFragment()
   */
  public CommandFragment getFirstSubFragment() 
  {
    CommandFragmentFactoryFactory factory  = extensionRegistry_.getFactoryFactory( ids_ );
    
    if( factory == null ) return null;
    
    CommandFragment               fragment = (CommandFragment)fragments_.get( factory );
    
    if( fragment == null )
    {
      fragment = factory.create().create();
      fragments_.put( factory, fragment );
    }
    
    return  fragment;
  }
  
  /**
   * @see org.eclipse.wst.command.internal.env.core.fragment.CommandFragment#getNextSubFragment(org.eclipse.wst.command.internal.env.core.fragment.CommandFragment)
   */
  public CommandFragment getNextSubFragment(CommandFragment fragment) 
  {
    return null;
  }
  
  /**
   * @see java.lang.Object#clone()
   */
  public Object clone() 
  {
    return new ExtensionFragment( this );
  }
}
