Java tutorial
/******************************************************************************* * Copyright (c) 2013 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.fusesource.ide.fabric8.ui.actions; import org.eclipse.core.databinding.validation.ValidationStatus; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; 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.Text; import org.fusesource.ide.commons.Viewers; import org.fusesource.ide.commons.ui.ICanValidate; import org.fusesource.ide.commons.ui.Selections; import org.fusesource.ide.commons.ui.form.Forms; import org.fusesource.ide.fabric8.core.dto.VersionDTO; import org.fusesource.ide.fabric8.ui.navigator.Fabric; import org.fusesource.ide.fabric8.ui.navigator.VersionNode; import org.fusesource.ide.fabric8.ui.navigator.VersionsNode; public abstract class CreateContainerFormSupport extends ProfileTreeSelectionFormSupport { public static final String AGENT_NAME_PROPERTY = "agentName"; public static final String AGENT_VERSION_PROPERTY = "agentVersion"; VersionNode versionNode; private String agentName; private Text containerNameField; private ComboViewer versionCombo; public CreateContainerFormSupport(ICanValidate validator, VersionNode versionNode, String defaultAgentName) { super(validator); this.versionNode = versionNode; this.agentName = defaultAgentName; addMandatoryPropertyNames(AGENT_VERSION_PROPERTY); addMandatoryPropertyNames(AGENT_NAME_PROPERTY); } @Override public abstract void okPressed(); public String getAgentName() { return agentName; } public void setAgentName(String agentName) { String oldValue = this.agentName; this.agentName = agentName; firePropertyChange(AGENT_NAME_PROPERTY, oldValue, agentName); } public VersionNode getAgentVersion() { return getVersionNode(); } public void setAgentVersion(VersionNode version) { VersionNode oldVersion = this.versionNode; this.versionNode = version; if (version != null) { setProfilesViewerInput(version); firePropertyChange(AGENT_VERSION_PROPERTY, oldVersion, this.versionNode); } } @Override protected String getFormHeader() { return Messages.agentFormHeader; } @Override public void setFocus() { containerNameField.setFocus(); } public VersionNode getVersionNode() { return versionNode; } public Fabric getFabric() { if (versionNode != null) { return versionNode.getFabric(); } return null; } @Override public Control createDialogArea(Composite parent) { Composite outer = createWizardArea(parent); createButtons(outer); return parent; } public Composite createWizardArea(Composite parent) { createForm(parent); Composite inner = createSectionComposite(getSectionHeader(), new GridData(GridData.FILL_HORIZONTAL)); GridLayout layout = new GridLayout(); layout.numColumns = 2; layout.marginHeight = 0; layout.marginWidth = 0; inner.setLayout(layout); createTextFields(inner); if (isSelectProfile()) { Composite outer = createSectionComposite(Messages.selectedProfiles, new GridData(GridData.FILL_BOTH)); layout = new GridLayout(); layout.numColumns = 2; layout.marginHeight = 0; layout.marginWidth = 0; outer.setLayout(layout); createColumnsViewer(outer); loadPreference(); return outer; } else { return inner; } } protected String getSectionHeader() { return Messages.agentFieldsHeader; } @Override protected void createTextFields(Composite inner) { containerNameField = createBeanPropertyTextField(inner, this, AGENT_NAME_PROPERTY, Messages.agentNameLabel, Messages.agentNameTooltip); if (chooseVersion()) { versionCombo = createBeanPropertyCombo(inner, this, AGENT_VERSION_PROPERTY, Messages.agentVersionLabel, Messages.agentVersionTooltip, SWT.READ_ONLY | SWT.BORDER); versionCombo.setContentProvider(new IStructuredContentProvider() { @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } @Override public void dispose() { } @Override public Object[] getElements(Object inputElement) { if (inputElement != null && inputElement instanceof VersionsNode) { VersionsNode versions = (VersionsNode) inputElement; return versions.getChildren(); } return null; } }); versionCombo.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { if (event.getSelection().isEmpty() || event.getSelection() instanceof IStructuredSelection == false) { // invalid selection return; } IStructuredSelection isel = (IStructuredSelection) event.getSelection(); Object o = isel.getFirstElement(); if (o instanceof VersionNode) { setAgentVersion((VersionNode) o); } } }); Viewers.async(new Runnable() { @Override public void run() { versionCombo.setSelection(new StructuredSelection(versionNode), true); } }); } } protected boolean chooseVersion() { return true; } public String getNewAgentName() { return containerNameField.getText(); } protected VersionDTO getVersion() { if (versionCombo != null) { return (VersionDTO) Selections.getFirstSelection(versionCombo.getSelection()); } return null; } @Override protected void validateProfiles() { IStatus status; if (hasCheckedProfiles()) { status = ValidationStatus.ok(); } else { status = ValidationStatus.error(Messages.noProfileSelected); } TreeViewer profilesViewer = getProfilesViewer(); Forms.updateMessageManager(getMessageManager(), profilesViewer, profilesViewer.getControl(), status, "selectedProfiles"); } /** * Loads the preference. */ protected void loadPreference() { if (versionCombo != null) { this.versionCombo.setInput(getFabric().getVersionsNode()); } VersionNode v = this.versionNode; // we have to clear the selected version node because otherwise the // validator does not recognize the changed selection and therefore // the version has to be reselected even if its already selected to // get the validation done setAgentVersion(null); if (versionCombo != null) { versionCombo.getCombo().clearSelection(); for (int i = 0; i < this.versionCombo.getCombo().getItemCount(); i++) { if (this.versionCombo.getElementAt(i).equals(v)) { this.versionCombo.getCombo().select(i); break; } } } setAgentVersion(v); } }