/******************************************************************************* * Copyright (c) 2010 SAP AG. * 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: * Emil Simeonov - initial API and implementation. * Dimitar Donchev - initial API and implementation. * Dimitar Tenev - initial API and implementation. * Nevena Manova - initial API and implementation. * Georgi Konstantinov - initial API and implementation. *******************************************************************************/ package org.eclipse.wst.sse.sieditor.ui.v2.propertyeditor.selectionlisteners; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Display; import org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema; import org.eclipse.wst.sse.sieditor.ui.v2.AbstractFormPageController; import org.eclipse.wst.sse.sieditor.ui.v2.newtypedialog.ITypeDialogStrategy; import org.eclipse.wst.sse.sieditor.ui.v2.newtypedialog.NewTypeDialog; import org.eclipse.wst.sse.sieditor.ui.v2.propertyeditor.TypePropertyEditor; import org.eclipse.wst.sse.sieditor.ui.v2.utils.UIUtils; /** * This is the selection listener for the {@link TypePropertyEditor} "New..." * button. This listener is responsible for the creation of the * {@link NewTypeDialog} and for the creation of the selected type itself * */ public class TypePropertyEditorNewButtonSelectionListener extends AbstractTypePropertyEditorEventListener { public TypePropertyEditorNewButtonSelectionListener(final TypePropertyEditor propertyEditor) { super(propertyEditor); } @Override public void widgetSelected(final SelectionEvent e) { final ITypeDialogStrategy strategy = getPropertyEditor().createNewTypeDialogStrategy(); final NewTypeDialog newTypeDialog = createNewTypeDialog(strategy); if (newTypeDialog.createAndOpen().isOK()) { newType(newTypeDialog.getNewTypeType(), newTypeDialog.getNewTypeName(), strategy); } } @Override public void widgetDefaultSelected(final SelectionEvent e) { widgetSelected(e); } /** * utility method. calls the given property editor * {@link AbstractFormPageController} new type command * * @param newTypeType * - the type of the new type to add: * {@link NewTypeDialog#RADIO_SELECTION_ELEMENT}, * {@link NewTypeDialog#RADIO_SELECTION_STRUCTURE_TYPE}, etc. * @param newTypeName */ protected void newType(final String newTypeType, final String newTypeName, final ITypeDialogStrategy strategy) { final ISchema schema = strategy.getSchema(); if (NewTypeDialog.RADIO_SELECTION_ELEMENT.equals(newTypeType)) { getPropertyEditor().getFormPageController().newElementType(newTypeName, schema, getPropertyEditor()); } else if (NewTypeDialog.RADIO_SELECTION_SIMPLE_TYPE.equals(newTypeType)) { getPropertyEditor().getFormPageController().newSimpleType(newTypeName, schema, getPropertyEditor()); } else if (NewTypeDialog.RADIO_SELECTION_STRUCTURE_TYPE.equals(newTypeType)) { getPropertyEditor().getFormPageController().newStructureType(newTypeName, schema, getPropertyEditor()); } } // =========================================================== // helpers // =========================================================== protected UIUtils utils() { return UIUtils.instance(); } /** * utility method, for testing purposes only * * @param strategy * - the strategy to create the dialog with * @return the created new type dialog */ protected NewTypeDialog createNewTypeDialog(final ITypeDialogStrategy strategy) { return new NewTypeDialog(Display.getCurrent().getActiveShell(), strategy); } }