/*******************************************************************************
* 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.sections;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema;
import org.eclipse.wst.sse.sieditor.ui.i18n.Messages;
import org.eclipse.wst.sse.sieditor.ui.v2.IFormPageController;
import org.eclipse.wst.sse.sieditor.ui.v2.UIConstants;
import org.eclipse.wst.sse.sieditor.ui.v2.common.CarriageReturnListener;
import org.eclipse.wst.sse.sieditor.ui.v2.common.LabeledControl;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.IDataTypesFormPageController;
import org.eclipse.wst.sse.sieditor.ui.v2.dt.nodes.impl.NamespaceNode;
public class NamespaceDetailsSection extends AbstractDetailsPageSection {
private Text namespaceText;
private boolean isNamespaceDirty;
private LabeledControl<Text> namespaceControl;
public NamespaceDetailsSection(IFormPageController controller, FormToolkit toolkit, IManagedForm managedForm) {
super(controller, toolkit, managedForm);
}
@Override
protected int getColumnsCount() {
return 2;
}
@Override
public void createContents(Composite parent) {
final Section section = createSection(parent, Messages.NamespaceDetailsSection_section_title);
FormToolkit toolkit = getToolkit();
Composite clientComposite = toolkit.createComposite(section);
section.setClient(clientComposite);
setCompositeLayout(clientComposite);
createNamespaceControls(toolkit, clientComposite);
toolkit.paintBordersFor(clientComposite);
}
@Override
public void refresh() {
ISchema schema = (ISchema) getModelObject();
namespaceText.setText(NamespaceNode.getNamespaceDisplayText(schema));
namespaceText.setEditable(isEditable());
isNamespaceDirty = false;
}
private void createNamespaceControls(FormToolkit toolkit, Composite clientComposite) {
namespaceControl = new LabeledControl<Text>(toolkit, clientComposite, Messages.NamespaceDetailsSection_namespace_label);
namespaceControl.setControl(toolkit.createText(clientComposite, UIConstants.EMPTY_STRING, SWT.SINGLE));
namespaceText = namespaceControl.getControl();
GridDataFactory.swtDefaults().grab(true, false).align(SWT.FILL, SWT.CENTER).applyTo(namespaceText);
namespaceText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
String namespace = ((ISchema) getModelObject()).getNamespace();
if (!isNamespaceDirty && !namespaceText.getText().trim().equals(namespace)) {
isNamespaceDirty = true;
dirtyStateChanged();
}
}
});
namespaceText.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
if (isNamespaceDirty) {
ISchema schema = (ISchema) getModelObject();
String namespace = schema.getNamespace();
String namespaceTextValue = namespaceText.getText().trim();
if (!namespaceTextValue.equals(namespace)) {
((IDataTypesFormPageController) getController()).renameNamespace(schema, namespaceTextValue);
}
isNamespaceDirty = false;
dirtyStateChanged();
}
}
});
namespaceText.addKeyListener(new CarriageReturnListener());
}
protected ISharedImages getSharedImages() {
return PlatformUI.getWorkbench().getSharedImages();
}
@Override
public boolean isDirty() {
return isNamespaceDirty;
}
@Override
public boolean isStale() {
ISchema modelObject = (ISchema) getModelObject();
if (modelObject == null) {
return false;
}
String namespaceTextValue = namespaceText.getText().trim();
return !namespaceTextValue.equals(modelObject.getNamespace());
}
@Override
protected Text getDefaultControl() {
return namespaceText;
}
}