/*******************************************************************************
 * Copyright (c) 2005, 2012 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.bpel.ui.commands;

import java.util.HashSet;
import java.util.Set;

import org.eclipse.bpel.model.partnerlinktype.PartnerLinkType;
import org.eclipse.bpel.ui.IBPELUIConstants;
import org.eclipse.bpel.ui.util.ModelHelper;


/**
 * Deletes a PartnerLinkType from its enclosing WSDL file.
 */
public class DeletePartnerLinkTypeCommand extends DeleteWSDLExtensibilityElementCommand {

	// TODO: wrong label?
	@Override
	public String getDefaultLabel() { return IBPELUIConstants.CMD_DELETE_ROLE; }

	public DeletePartnerLinkTypeCommand(PartnerLinkType plt) {
		super(plt);
	}
	
	/**
	 * Override super's method because we should not delete other partner link
	 */
	@Override
	public void doExecute() {
		fDefinition = fElement.getEnclosingDefinition();
	
		Set<Object> modelRootSet = new HashSet<Object>();
		modelRootSet.add(fElement.eResource());		
		modelRootSet.add(ModelHelper.getBPELEditor(fElement).getResource());
		
		fElement.setEnclosingDefinition(null);
		fDefinition.getEExtensibilityElements().remove(fElement);

	}
}
