/*******************************************************************************
* Copyright (c) 2008 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.smooks.configuration.editors;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.edit.command.AddCommand;
import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.provider.IItemPropertySource;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.window.IShellProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.jboss.tools.smooks.editor.ISmooksModelProvider;
/**
* @author Dart
*
*/
public class NewOrModifySmooksElementDialog extends Dialog {
private EObject model;
private FormToolkit toolkit;
private ISmooksModelProvider modelProvider = null;
private boolean modify = false;
private EObject parentModel;
private EStructuralFeature feature;
private IEditorPart editorPart;
public NewOrModifySmooksElementDialog(IShellProvider parentShell, EStructuralFeature feature, EObject model,
EObject parentModel, FormToolkit toolkit, ISmooksModelProvider modelProvider, IEditorPart editorPart,
boolean modify) {
super(parentShell);
this.feature = feature;
this.model = model;
this.toolkit = toolkit;
this.modelProvider = modelProvider;
this.modify = modify;
this.editorPart = editorPart;
this.parentModel = parentModel;
}
public NewOrModifySmooksElementDialog(Shell parentShell, EStructuralFeature feature, EObject model,
EObject parentModel, FormToolkit toolkit, ISmooksModelProvider modelProvider, IEditorPart editorPart,
boolean modify) {
super(parentShell);
this.feature = feature;
this.model = model;
this.toolkit = toolkit;
this.modelProvider = modelProvider;
this.modify = modify;
this.editorPart = editorPart;
this.parentModel = parentModel;
}
protected void createButtonsForButtonBar(Composite parent) {
// create OK and Cancel buttons by default
String okLabel = IDialogConstants.OK_LABEL;
if (modify) {
okLabel = Messages.NewOrModifySmooksElementDialog_CloseButtonLabel;
}
createButton(parent, IDialogConstants.OK_ID, okLabel, true);
if (!modify) {
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
}
@Override
protected Control createDialogArea(Composite parent) {
Composite mainComposite = (Composite) super.createDialogArea(parent);
// parent.setBackground(toolkit.getColors().getBackground());
mainComposite.setBackground(toolkit.getColors().getBackground());
Composite mc = new Composite(mainComposite, SWT.NONE);
mc.setBackground(toolkit.getColors().getBackground());
GridData gd = new GridData(GridData.FILL_BOTH);
gd.heightHint = 500;
gd.widthHint = 400;
mc.setLayoutData(gd);
GridLayout gl = new GridLayout();
gl.numColumns = 2;
gl.verticalSpacing = 1;
mc.setLayout(gl);
ModelPanelCreator creator = new ModelPanelCreator();
if (modelProvider != null && model instanceof EObject) {
AdapterFactoryEditingDomain editDomain = (AdapterFactoryEditingDomain) modelProvider.getEditingDomain();
IItemPropertySource propertySource = (IItemPropertySource) editDomain.getAdapterFactory().adapt(model,
IItemPropertySource.class);
creator.createModelPanel((EObject) model, toolkit, mc, propertySource, modelProvider, editorPart);
}
return mainComposite;
}
@Override
protected void okPressed() {
try {
if (!modify && parentModel != null && modelProvider != null && feature != null) {
EditingDomain editingDomain = modelProvider.getEditingDomain();
Command command = null;
if (feature instanceof EReference) {
if (((EReference) feature).isMany()) {
command = AddCommand.create(editingDomain, parentModel, feature, model);
} else {
command = SetCommand.create(editingDomain, parentModel, feature, model);
}
}
if (command != null)
editingDomain.getCommandStack().execute(command);
}
} catch (Exception e) {
e.printStackTrace();
}
super.okPressed();
}
}