blob: 7b79dd09f5c4f4a67b87d582f5787f66f48aa83a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 BSI Business Systems Integration 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:
* BSI Business Systems Integration AG - initial API and implementation
******************************************************************************/
package org.eclipse.scout.sdk.ui.dialog;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.IType;
import org.eclipse.scout.commons.StringUtility;
import org.eclipse.scout.sdk.Texts;
import org.eclipse.scout.sdk.extensions.targetpackage.DefaultTargetPackage;
import org.eclipse.scout.sdk.extensions.targetpackage.IDefaultTargetPackage;
import org.eclipse.scout.sdk.ui.fields.StyledTextField;
import org.eclipse.scout.sdk.ui.fields.javacode.EntityTextField;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
import org.eclipse.scout.sdk.util.ScoutUtility;
import org.eclipse.scout.sdk.util.type.TypeUtility;
import org.eclipse.scout.sdk.workspace.IScoutBundle;
import org.eclipse.scout.sdk.workspace.type.ScoutTypeUtility;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
/**
* <h3>{@link TemplateFromFormFieldDialog}</h3>
*
* @author Andreas Hoegger
* @since 1.0.8 20.09.2010
*/
public class TemplateFromFormFieldDialog extends AbstractStatusDialog {
private StyledTextField m_templateNameField;
private Button m_replaceExistingFormField;
private Button m_createExternalFormDataField;
private EntityTextField m_entityField;
private final IType m_formField;
private final IScoutBundle m_clientBundle;
private String m_templateName;
private String m_packageName;
private boolean m_replaceFormField;
private boolean m_createExternalFormData;
/**
* @param parentShell
*/
public TemplateFromFormFieldDialog(Shell parentShell, String templateName, IType formField) {
super(parentShell);
m_formField = formField;
m_templateName = templateName;
m_replaceFormField = true;
m_createExternalFormData = true;
m_clientBundle = ScoutTypeUtility.getScoutBundle(formField.getJavaProject());
setTargetPackage(DefaultTargetPackage.get(m_clientBundle, IDefaultTargetPackage.CLIENT_TEMPLATE_FORMFIELD));
setShellStyle(getShellStyle() | SWT.RESIZE);
setTitle(Texts.get("CreateTemplateOf", getFormField().getElementName()));
setMessage(Texts.get("TemplateDesc"));
}
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(Texts.get("TemplateSupport"));
}
@Override
protected Control createDialogArea(Composite parent) {
int labelColWidthPercent = 20;
Composite container = new Composite(parent, SWT.NONE);
m_templateNameField = getFieldToolkit().createStyledTextField(container, Texts.get("TemplateName"), labelColWidthPercent);
m_templateNameField.setReadOnlyPrefix("Abstract");
m_templateNameField.setText(getTemplateName());
m_templateNameField.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
m_templateName = m_templateNameField.getText();
pingStateChanging();
}
});
if (DefaultTargetPackage.isPackageConfigurationEnabled()) {
m_entityField = getFieldToolkit().createEntityTextField(container, Texts.get("EntityTextField"), m_clientBundle, labelColWidthPercent);
m_entityField.setText(getTargetPackage());
m_entityField.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
setTargetPackageInternal(m_entityField.getText());
pingStateChanging();
}
});
m_entityField.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL));
}
m_replaceExistingFormField = new Button(container, SWT.CHECK);
m_replaceExistingFormField.setText(Texts.get("UseTemplateFor", getFormField().getElementName()));
m_replaceExistingFormField.setSelection(isReplaceFormField());
m_replaceExistingFormField.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
m_replaceFormField = m_replaceExistingFormField.getSelection();
pingStateChanging();
}
});
m_createExternalFormDataField = new Button(container, SWT.CHECK);
m_createExternalFormDataField.setText(Texts.get("CreateExternalFormData"));
m_createExternalFormDataField.setSelection(isCreateExternalFormData());
m_createExternalFormDataField.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
m_createExternalFormData = m_createExternalFormDataField.getSelection();
pingStateChanging();
}
});
// layout
container.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH));
container.setLayout(new GridLayout(1, true));
m_templateNameField.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL));
m_replaceExistingFormField.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL));
m_createExternalFormDataField.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL));
return container;
}
@Override
protected void validate(MultiStatus multiStatus) {
multiStatus.add(getStatusTemplateName());
multiStatus.add(getStatusTargetPackge());
}
protected IStatus getStatusTargetPackge() {
return ScoutUtility.validatePackageName(getTargetPackage());
}
private IStatus getStatusTemplateName() {
if (StringUtility.isNullOrEmpty(getTemplateName()) || "Abstrat".equals(getTemplateName())) {
return new Status(IStatus.ERROR, ScoutSdkUi.PLUGIN_ID, Texts.get("NameNotValid"));
}
IScoutBundle bundle = ScoutTypeUtility.getScoutBundle(getFormField());
if (TypeUtility.existsType(bundle.getPackageName(getTargetPackage()) + "." + getTemplateName())) {
return new Status(IStatus.ERROR, ScoutSdkUi.PLUGIN_ID, Texts.get("TemplateAlreadyExists"));
}
return Status.OK_STATUS;
}
/**
* @return the formField
*/
public IType getFormField() {
return m_formField;
}
/**
* @return the templateName
*/
public String getTemplateName() {
return m_templateName;
}
/**
* @return the replaceFormField
*/
public boolean isReplaceFormField() {
return m_replaceFormField;
}
/**
* @return the createExternalFormData
*/
public boolean isCreateExternalFormData() {
return m_createExternalFormData;
}
public String getTargetPackage() {
return m_packageName;
}
public void setTargetPackage(String targetPackage) {
try {
setStateChanging(true);
setTargetPackageInternal(targetPackage);
if (isControlCreated() && m_entityField != null) {
m_entityField.setText(targetPackage);
}
}
finally {
setStateChanging(false);
}
}
protected void setTargetPackageInternal(String targetPackage) {
m_packageName = targetPackage;
}
}