package org.zend.php.zendserver.deployment.ui.editors; import java.util.Arrays; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.IMessageManager; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.forms.widgets.TableWrapData; import org.eclipse.ui.forms.widgets.TableWrapLayout; import org.zend.php.zendserver.deployment.core.descriptor.ChangeEvent; import org.zend.php.zendserver.deployment.core.descriptor.DeploymentDescriptorPackage; import org.zend.php.zendserver.deployment.core.descriptor.IDescriptorChangeListener; import org.zend.php.zendserver.deployment.core.descriptor.IParameter; import org.zend.php.zendserver.deployment.ui.Messages; public class ParameterDetailsPage extends DescriptorDetailsPage { private IManagedForm mform; private EditorField defaultValue; private EditorField defaultCombo; private ListField validation; private ComboField identical; private Section section; public ParameterDetailsPage(DeploymentDescriptorEditor editor) { super(editor); } public void initialize(IManagedForm form) { this.mform = form; } public void dispose() { // empty } public boolean isDirty() { return false; } public void commit(boolean onSave) { } public boolean setFormInput(Object input) { return false; } public boolean isStale() { return false; } public void refresh() { super.refresh(); refreshParametersList(); showChoiceWidgets(); } public void createContents(Composite parent) { TableWrapLayout layout = new TableWrapLayout(); layout.topMargin = 0; layout.leftMargin = 0; layout.rightMargin = 0; layout.bottomMargin = 0; layout.numColumns = 1; parent.setLayout(layout); FormToolkit toolkit = mform.getToolkit(); section = toolkit.createSection(parent, Section.DESCRIPTION|Section.TITLE_BAR); section.setText(Messages.ParameterDetailsPage_ParamDetails); section.marginWidth = 5; section.marginHeight = 5; Composite client = toolkit.createComposite(section); client.setLayout(new GridLayout(3, false)); section.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB)); section.setClient(client); IMessageManager mmng = mform.getMessageManager(); EditorField id = fields.add(new TextField(null, DeploymentDescriptorPackage.ID, Messages.ParameterDetailsPage_Id, mmng)); id.create(client, toolkit); ((GridData)id.getText().getLayoutData()).widthHint = 100; ComboField type = (ComboField) fields.add(new ComboField(null, DeploymentDescriptorPackage.TYPE, Messages.ParameterDetailsPage_Type, SWT.READ_ONLY)); type.setItems(new String[] { IParameter.CHOICE, IParameter.STRING, IParameter.PASSWORD, IParameter.EMAIL, IParameter.CHECKBOX, IParameter.NUMBER, IParameter.HOSTNAME }); type.create(client, toolkit); ((GridData)type.getCombo().getLayoutData()).widthHint = 100; toolkit.createLabel(client, ""); //$NON-NLS-1$ EditorField required = (CheckboxField) fields.add(new CheckboxField(null, DeploymentDescriptorPackage.REQUIRED, Messages.ParameterDetailsPage_Required)); required.create(client, toolkit); EditorField display = fields.add(new TextField(null, DeploymentDescriptorPackage.DISPLAY, Messages.ParameterDetailsPage_Display, mmng)); display.create(client, toolkit); ((GridData)display.getText().getLayoutData()).widthHint = 100; defaultValue = fields.add(new TextField(null, DeploymentDescriptorPackage.DEFAULTVALUE, Messages.ParameterDetailsPage_DefaultValue, mmng)); defaultValue.create(client, toolkit); ((GridData)defaultValue.getText().getLayoutData()).widthHint = 100; defaultCombo = fields.add(new ComboField(null, DeploymentDescriptorPackage.DEFAULTVALUE, Messages.ParameterDetailsPage_DefaultValue)); defaultCombo.create(client, toolkit); ((GridData)defaultCombo.getText().getLayoutData()).widthHint = 100; validation = (ListField) fields.add(new ListField(null, DeploymentDescriptorPackage.VALIDATION, Messages.ParameterDetailsPage_ValidValues, mmng)); validation.create(client, toolkit); ((GridData)validation.getText().getLayoutData()).heightHint = 100; ((GridData)validation.getText().getLayoutData()).widthHint = 100; toolkit.createLabel(client, ""); //$NON-NLS-1$ EditorField readonly = (CheckboxField) fields.add(new CheckboxField(null, DeploymentDescriptorPackage.READONLY, Messages.ParameterDetailsPage_Readonly)); readonly.create(client, toolkit); identical = (ComboField) fields.add(new ComboField(null, DeploymentDescriptorPackage.IDENTICAL, Messages.ParameterDetailsPage_Identical)); identical.create(client, toolkit); editor.getModel().addListener(new IDescriptorChangeListener() { public void descriptorChanged(ChangeEvent event) { if (event.target instanceof IParameter) { section.getDisplay().asyncExec(new Runnable() { public void run() { refreshParametersList(); showChoiceWidgets(); validationChange(); }; }); } } }); EditorField description = fields.add(new TextField(null, DeploymentDescriptorPackage.PARAM_DESCRIPTION, Messages.ParameterDetailsPage_Description, mmng)); description.create(client, toolkit); GridData gd = ((GridData)description.getText().getLayoutData()); gd.heightHint = 100; gd.widthHint = 100; toolkit.paintBordersFor(client); } private void refreshParametersList() { List<IParameter> params = editor.getDescriptorContainer().getDescriptorModel().getParameters(); String[] items = new String[params.size()]; for (int i = 0; i < params.size(); i++) { IParameter param = params.get(i); String paramId = param.getId(); items[i] = paramId; } String[] oldItems = identical.getCombo().getItems(); if (!Arrays.equals(oldItems, items)) { identical.setItems(items); } } private void showChoiceWidgets() { boolean showChoiceWidgets = IParameter.CHOICE.equals(((IParameter)input).getType()); defaultValue.setVisible(!showChoiceWidgets); defaultCombo.setVisible(showChoiceWidgets); validation.setVisible(showChoiceWidgets); section.layout(true); Point size = section.getSize(); Point newsize = section.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); section.setSize(size.x, newsize.y); } protected void validationChange() { List<String> vals = ((IParameter)input).getValidValues(); String[] strings = vals.toArray(new String[vals.size()]); ((ComboField)defaultCombo).setItems(strings); } }