blob: 089fa6413cdb93329dde2ce2ca83cec63c8666af [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2010 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.dialogs;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CommandStack;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.wst.common.core.search.pattern.QualifiedName;
import org.eclipse.wst.common.ui.internal.search.dialogs.ComponentSpecification;
import org.eclipse.wst.wsdl.Definition;
import org.eclipse.wst.wsdl.ui.internal.Messages;
import org.eclipse.wst.wsdl.ui.internal.adapters.basic.W11Description;
import org.eclipse.wst.wsdl.ui.internal.adapters.commands.W11AddBindingCommand;
import org.eclipse.wst.wsdl.ui.internal.adapters.commands.W11AddInterfaceCommand;
import org.eclipse.wst.wsdl.ui.internal.adapters.commands.W11AddMessageCommand;
import org.eclipse.wst.wsdl.ui.internal.asd.ASDEditorCSHelpIds;
import org.eclipse.wst.wsdl.ui.internal.asd.facade.IASDObject;
import org.eclipse.wst.wsdl.ui.internal.search.IWSDLSearchConstants;
import org.eclipse.wst.wsdl.ui.internal.util.NameUtil;
import org.eclipse.wst.wsdl.ui.internal.util.WSDLAdapterFactoryHelper;
import org.eclipse.wst.xsd.ui.internal.adt.edit.IComponentDialog;
public class W11NewComponentDialog implements IComponentDialog {
protected NewComponentDialog dialog;
protected QualifiedName qualifiedName;
protected IFile iFile;
protected W11Description description;
protected IASDObject newObject;
public W11NewComponentDialog(QualifiedName qualifiedName, IFile iFile, W11Description description) {
this.qualifiedName = qualifiedName;
this.iFile = iFile;
this.description = description;
Shell shell = Display.getCurrent().getActiveShell();
if (qualifiedName == IWSDLSearchConstants.BINDING_META_NAME) {
String dialogTitle = Messages._UI_LABEL_NEW_BINDING; //$NON-NLS-1$
String baseName = NameUtil.buildUniqueBindingName(getDefinition(), "NewBinding"); //$NON-NLS-1$
List usedNames = NameUtil.getUsedBindingNames(getDefinition());
dialog = new NewComponentDialog(shell, dialogTitle, baseName, usedNames);
PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, ASDEditorCSHelpIds.NEW_BINDING_DIALOG);
}
else if (qualifiedName == IWSDLSearchConstants.PORT_TYPE_META_NAME) {
String dialogTitle = Messages._UI_LABEL_NEW_PORTTYPE; //$NON-NLS-1$
String baseName = NameUtil.buildUniquePortTypeName(getDefinition(), "NewPortType"); //$NON-NLS-1$
List usedNames = NameUtil.getUsedPortTypeNames(getDefinition());
dialog = new NewComponentDialog(shell, dialogTitle, baseName, usedNames);
PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, ASDEditorCSHelpIds.NEW_PORTTYPE_DIALOG);
}
else if (qualifiedName == IWSDLSearchConstants.MESSAGE_META_NAME) {
String dialogTitle = Messages._UI_LABEL_NEW_MESSAGE; //$NON-NLS-1$
String baseName = NameUtil.buildUniqueMessageName(getDefinition(), "NewMessage"); //$NON-NLS-1$
List usedNames = NameUtil.getUsedMessageNames(getDefinition());
dialog = new NewComponentDialog(shell, dialogTitle, baseName, usedNames);
PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, ASDEditorCSHelpIds.NEW_MESSAGE_DIALOG);
}
}
private Definition getDefinition() {
return (Definition) description.getTarget();
}
public void setInitialSelection(ComponentSpecification componentSpecification) {
}
public ComponentSpecification getSelectedComponent() {
String qualifier = getDefinition().getPrefix(getDefinition().getTargetNamespace());
String name = dialog.getName();
ComponentSpecification spec = new ComponentSpecification(qualifier, name, iFile);
spec.setObject(newObject);
return spec;
}
public int createAndOpen() {
int rValue = dialog.createAndOpen();
if (rValue == Window.OK) {
// Create the new Object
if (qualifiedName == IWSDLSearchConstants.BINDING_META_NAME) {
W11AddBindingCommand command = (W11AddBindingCommand) description.getAddBindingCommand();
command.setNewBindingName(dialog.getName());
execute(command);
Object newWSDLObject = command.getNewBinding();
newObject = (IASDObject) WSDLAdapterFactoryHelper.getInstance().adapt((Notifier) newWSDLObject);
}
else if (qualifiedName == IWSDLSearchConstants.PORT_TYPE_META_NAME) {
W11AddInterfaceCommand command = (W11AddInterfaceCommand) description.getAddInterfaceCommand();
command.setNewPortTypeName(dialog.getName());
execute(command);
Object newWSDLObject = command.getNewPortType();
newObject = (IASDObject) WSDLAdapterFactoryHelper.getInstance().adapt((Notifier) newWSDLObject);
}
else if (qualifiedName == IWSDLSearchConstants.MESSAGE_META_NAME) {
W11AddMessageCommand command = (W11AddMessageCommand) description.getAddMessageCommand();
command.setNewMessageName(dialog.getName());
execute(command);
Object newWSDLObject = command.getNewMessage();
newObject = (IASDObject) WSDLAdapterFactoryHelper.getInstance().adapt((Notifier) newWSDLObject);
}
}
return rValue;
}
private void execute(Command command) {
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
if (page.getActiveEditor().getAdapter(CommandStack.class) != null) {
CommandStack stack = (CommandStack) page.getActiveEditor().getAdapter(CommandStack.class);
stack.execute(command);
}
else {
command.execute();
}
}
}