org.fusesource.ide.fabric.actions.jclouds.CloudDetailsForm.java Source code

Java tutorial

Introduction

Here is the source code for org.fusesource.ide.fabric.actions.jclouds.CloudDetailsForm.java

Source

/*******************************************************************************
 * Copyright (c) 2010 JVM Monitor project. All rights reserved.
 *
 * This code is distributed under the terms of the Eclipse Public License v1.0
 * which is available at http://www.eclipse.org/legal/epl-v10.html
 *******************************************************************************/
package org.fusesource.ide.fabric.actions.jclouds;

import com.google.common.collect.Lists;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
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.Text;
import org.fusesource.ide.commons.ui.ICanValidate;
import org.fusesource.ide.commons.ui.Selections;
import org.fusesource.ide.commons.ui.form.FormSupport;
import org.fusesource.ide.fabric.actions.Messages;
import org.jclouds.apis.ApiMetadata;
import org.jclouds.providers.ProviderMetadata;

import com.google.common.base.Objects;

/**
 * The form for adding or editing {@link CloudDetails}
 */
public class CloudDetailsForm extends FormSupport {
    private ComboViewer providerNameField;
    private ComboViewer apiNameField;
    private Text endpointField;
    private Text identityField;
    private CloudDetails details = new CloudDetails();
    private Text nameField;

    public CloudDetailsForm(ICanValidate validator) {
        super(validator);
    }

    @Override
    protected boolean isMandatory(Object bean, String propertyName) {
        return !Objects.equal(propertyName, "ownerId") && !Objects.equal(propertyName, "provider")
                && !Objects.equal(propertyName, "api") && !Objects.equal(propertyName, "endpoint");
    }

    public CloudDetails getDetails() {
        return details;
    }

    public void setDetails(CloudDetails details) {
        this.details = details;
    }

    @Override
    public void setFocus() {
        nameField.setFocus();
    }

    @Override
    public void createTextFields(Composite parent) {
        Composite inner = createSectionComposite(Messages.jclouds_cloudDetails, new GridData(GridData.FILL_BOTH));

        GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        inner.setLayout(layout);

        nameField = createBeanPropertyTextField(inner, details, "name", Messages.jclouds_nameLabel,
                Messages.jclouds_nameTooltip);
        providerNameField = createBeanPropertyCombo(inner, details, "provider", Messages.jclouds_providerNameLabel,
                Messages.jclouds_providerNameTooltip, JClouds.getComputeProviders());
        apiNameField = createBeanPropertyCombo(inner, details, "api", Messages.jclouds_apiNameLabel,
                Messages.jclouds_apiNameTooltip, JClouds.getComputeApis());

        providerNameField.getCombo().select(0);
        apiNameField.getCombo().select(0);

        providerNameField.addSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                ProviderMetadata item = (ProviderMetadata) Selections.getFirstSelection(event.getSelection());
                apiNameField.getCombo().setEnabled(item == JClouds.EMPTY_PROVIDER);
                validate();
            }
        });
        apiNameField.addSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                ApiMetadata item = (ApiMetadata) Selections.getFirstSelection(event.getSelection());
                providerNameField.getCombo().setEnabled(item == JClouds.EMPTY_API);
                validate();
            }
        });

        // TODO not sure why we need this :)
        ProviderMetadata provider = details.getProvider();
        if (provider != null) {
            providerNameField.setSelection(new StructuredSelection(provider));
        }
        ApiMetadata api = details.getApi();
        if (api != null) {
            apiNameField.setSelection(new StructuredSelection(api));
        }

        endpointField = createBeanPropertyTextField(inner, details, "endpoint", Messages.jclouds_endpointLabel,
                Messages.jclouds_endpointTooltip);
        identityField = createBeanPropertyTextField(inner, details, "identity", Messages.jclouds_identityLabel,
                Messages.jclouds_identityTooltip);
        createBeanPropertyTextField(inner, details, "credential", Messages.jclouds_credentialLabel,
                Messages.jclouds_credentialTooltip, SWT.PASSWORD);
        createBeanPropertyTextField(inner, details, "ownerId", Messages.jclouds_ownerLabel,
                Messages.jclouds_ownerTooltip, SWT.PASSWORD);

        endpointField.setEnabled(false);
        apiNameField.addPostSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                endpointField.setEnabled(!event.getSelection().isEmpty());
            }
        });
    }

    protected ComboViewer createBeanPropertyCombo(Composite parent, Object bean, String propertyName,
            String labelText, String tooltip, Iterable<?> input) {
        ComboViewer answer = createBeanPropertyCombo(parent, bean, propertyName, labelText, tooltip, SWT.READ_ONLY);
        answer.setInput(Lists.newArrayList(input));
        answer.setLabelProvider(JCloudsLabelProvider.getInstance());
        return answer;
    }

    @Override
    public void okPressed() {
        // lets cache the data and check if its invalid
        CloudDetailsCachedData.getInstance(details).startLoadingDataJobs();
    }

    /* (non-Javadoc)
     * @see org.fusesource.ide.commons.ui.form.FormSupport#isValid()
     */
    @Override
    public boolean isValid() {
        ApiMetadata api = (ApiMetadata) Selections.getFirstSelection(apiNameField.getSelection());
        ProviderMetadata provider = (ProviderMetadata) Selections
                .getFirstSelection(providerNameField.getSelection());
        return super.isValid() && (api != JClouds.EMPTY_API || provider != JClouds.EMPTY_PROVIDER);
    }
}