/*******************************************************************************
 * Copyright (c) 2000, 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.ui.widgets;

import java.util.Hashtable;

import org.eclipse.wst.command.internal.provisional.env.core.data.DataMappingRegistry;
import org.eclipse.wst.command.internal.provisional.env.ui.widgets.INamedWidgetContributor;

public class WidgetBindingToWidgetFactoryAdapter 
{
  private Hashtable            widgetContributor_;
  private CommandWidgetBinding binding_;
  
  public WidgetBindingToWidgetFactoryAdapter( CommandWidgetBinding binding )
  {
    widgetContributor_ = new Hashtable(); 
	binding_           = binding;
	
	binding.registerWidgetMappings( new MyWidgetRegistry() );
  }
  
  public INamedWidgetContributor getWidget( String id )
  {
    return (INamedWidgetContributor)widgetContributor_.get( id );  
  }
  
  public void registerDataMappings( DataMappingRegistry registry )
  {
    binding_.registerDataMappings( registry );  
  }
  
  private class MyWidgetRegistry implements WidgetRegistry
  {
	public void add(String fragmentId, String pageName, String pageTitle, WidgetContributorFactory widgetFactory) 
	{
	  SimpleWidgetContributor widget = new SimpleWidgetContributor();
	  widget.setTitle( pageName );
	  widget.setDescription( pageName );
	  widget.setFactory( new MyWidgetContributorFactory( widgetFactory ) );
	  
	  widgetContributor_.put( fragmentId, widget );
	}	  
  }
  
  private class MyWidgetContributorFactory implements WidgetContributorFactory
  {
	private WidgetContributorFactory factory_;
	private WidgetContributor        widget_;
	
	public MyWidgetContributorFactory( WidgetContributorFactory factory )
	{
	  factory_ = factory;	
	}
	
	public WidgetContributor create() 
	{
      if( widget_ == null )
	  {
	    widget_ = factory_.create();
	  }
	  
	  return widget_;
	}	  
  }
}
