/*******************************************************************************
* 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.editor.propertySections;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.IFormColors;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
import org.jboss.tools.smooks.configuration.editors.utils.SmooksUIUtils;
import org.jboss.tools.smooks.gef.tree.model.TreeNodeConnection;
import org.jboss.tools.smooks.model.javabean12.Javabean12Package;
import org.jboss.tools.smooks.model.javabean12.ValueType;
/**
* @author Dart
*
*/
public class JavaMappingPathSection extends AbstractSmooksPropertySection {
private Composite controlComposite;
private Text pathText;
private Text namespaceText;
private Text defaultValueText;
protected boolean lock = false;
private Label defaultValueLabel;
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.views.properties.tabbed.AbstractPropertySection#createControls
* (org.eclipse.swt.widgets.Composite,
* org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage)
*/
@Override
public void createControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) {
super.createControls(parent, aTabbedPropertySheetPage);
TabbedPropertySheetWidgetFactory factory = aTabbedPropertySheetPage.getWidgetFactory();
Section section = createRootSection(factory, parent);
section.setText(Messages.JavaMappingPathSection_MappingPath);
controlComposite = factory.createComposite(section, SWT.NONE);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
gridLayout.horizontalSpacing = 13;
gridLayout.verticalSpacing = 20;
controlComposite.setLayout(gridLayout);
section.setClient(controlComposite);
createTextContorls(factory);
hookTextContorls();
}
protected void createTextContorls(TabbedPropertySheetWidgetFactory factory) {
Label pathLabel = factory.createLabel(controlComposite, Messages.JavaMappingPathSection_PathLabel);
pathLabel.setForeground(factory.getColors().getColor(IFormColors.TITLE));
pathText = factory.createText(controlComposite, "", SWT.READ_ONLY); //$NON-NLS-1$
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
pathText.setLayoutData(gd);
Label namespaceLabel = factory.createLabel(controlComposite, Messages.JavaMappingPathSection_NamespaceLabel);
namespaceLabel.setForeground(factory.getColors().getColor(IFormColors.TITLE));
namespaceText = factory.createText(controlComposite, ""); //$NON-NLS-1$
namespaceText.setLayoutData(gd);
defaultValueLabel = factory.createLabel(controlComposite, Messages.JavaMappingPathSection_DefaultLabel);
defaultValueLabel.setForeground(factory.getColors().getColor(IFormColors.TITLE));
defaultValueText = factory.createText(controlComposite, ""); //$NON-NLS-1$
defaultValueText.setLayoutData(gd);
}
protected void hookTextContorls() {
namespaceText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
if (lock)
return;
Object obj = getTargetModel();
EditingDomain domain = getSmooksModelProvider().getEditingDomain();
if (obj instanceof EObject && domain != null) {
EObject model = (EObject) obj;
EStructuralFeature feature = SmooksUIUtils.getSelectorNamespaceFeature(model);
if (feature != null) {
Object v = model.eGet(feature);
String newV = ((Text) e.getSource()).getText().trim();
if (v != null) {
String oldV = v.toString().trim();
if (oldV.equals(newV))
return;
}
Command setCommand = SetCommand.create(domain, model, feature, newV);
domain.getCommandStack().execute(setCommand);
}
}
}
});
defaultValueText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
if (lock)
return;
Object obj = getTargetModel();
EditingDomain domain = getSmooksModelProvider().getEditingDomain();
if (obj instanceof ValueType && domain != null) {
ValueType model = (ValueType) obj;
Object v = model.getDefault();
String newV = ((Text) e.getSource()).getText().trim();
if (v != null) {
String oldV = v.toString().trim();
if (oldV.equals(newV))
return;
}
Command setCommand = SetCommand.create(domain, model, Javabean12Package.Literals.VALUE_TYPE__DEFAULT, newV);
domain.getCommandStack().execute(setCommand);
}
}
});
}
protected void refreshTextControls() {
lock = true;
pathText.setText(""); //$NON-NLS-1$
namespaceText.setText(""); //$NON-NLS-1$
defaultValueText.setText(""); //$NON-NLS-1$
defaultValueLabel.setVisible(false);
defaultValueText.setVisible(false);
Object obj = getTargetModel();
if (obj instanceof EObject) {
EObject model = (EObject) obj;
EStructuralFeature feature = SmooksUIUtils.getSelectorFeature(model);
if (feature != null) {
Object v = model.eGet(feature);
if (v != null) {
pathText.setText(v.toString().trim());
}
}
feature = SmooksUIUtils.getSelectorNamespaceFeature(model);
if (feature != null) {
Object v = model.eGet(feature);
if (v != null) {
namespaceText.setText(v.toString().trim());
}
}
if (model instanceof ValueType) {
defaultValueLabel.setVisible(true);
defaultValueText.setVisible(true);
Object v = ((ValueType) model).getDefault();// .eGet(feature);
if (v != null) {
defaultValueText.setText(v.toString().trim());
}
}
}
lock = false;
}
protected Object getTargetModel() {
TreeNodeConnection lineModel = (TreeNodeConnection) getPresentSelectedGraphModel();
Object model = lineModel.getTargetNode().getData();
model = AdapterFactoryEditingDomain.unwrap(model);
return model;
}
/*
* (non-Javadoc)
*
* @see
* org.jboss.tools.smooks.editor.propertySections.AbstractSmooksPropertySection
* #refresh()
*/
@Override
public void refresh() {
super.refresh();
refreshTextControls();
}
}