/*******************************************************************************
 * Copyright (c) 2001, 2006 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.wsdl.ui.internal.commands;

import org.eclipse.wst.wsdl.Fault;
import org.eclipse.wst.wsdl.Operation;
import org.eclipse.wst.wsdl.WSDLFactory;
import org.eclipse.wst.wsdl.ui.internal.util.NameUtil;


public final class AddFaultCommand extends AddMessageReferenceCommand
{
  private Fault originalFault;
  
  public AddFaultCommand(Operation operation, String name)
  {
    super(operation,name);
  }

  public AddFaultCommand(Operation operation, String name, boolean createMessage)
  {
    super(operation,name,createMessage);
  }
  
  /*
   * Constructor used to create a Fault based on the given Fault.  In essence, this will
   * create a copy of the given Fault.
   */
  public AddFaultCommand(Operation operation, Fault originalFault, String name) {
  	super(operation, name, false);
  	
  	this.originalFault = originalFault;
  }
  
  public void run()
  {
    messageReference = WSDLFactory.eINSTANCE.createFault();
    messageReference.setName(name); 
    messageReference.setEnclosingDefinition(operation.getEnclosingDefinition());
    operation.addFault((Fault)messageReference);
    
    //  TBD - add binding fault

    if (originalFault == null) {
    	if (createMessage)
    		createMessage();
    }
    else {
    	// Do necessary copying of data from original Fault to new Fault
    	if (originalFault.getEMessage() != null) {
//    		String originalMsgName = originalFault.getEMessage().getQName().getLocalPart();
//    		
//    		boolean gened = false;
//    		if (originalFault.eContainer() instanceof Operation)
//    			gened = SmartRenameAction.isMessageNameGenerated(originalMsgName, ((Operation) originalFault.eContainer()).getName(), "");
//    		
//    		String newMsgName = "";
//    		if (gened) {
//    			newMsgName = NameUtil.buildUniqueMessageName(operation.getEnclosingDefinition(), messageReference);
//    		}
//    		else {
//    			Definition definition = operation.getEnclosingDefinition();
//    			Message tMessage = originalFault.getEMessage();
//    			newMsgName = NameUtil.buildUniqueMessageName(definition, tMessage.getQName().getLocalPart());
//    		}
    		
    		createMessage(originalFault, NameUtil.buildUniqueMessageName(operation.getEnclosingDefinition(), messageReference));
    	}
    }
  }
}
