com.ibm.xsp.extlib.designer.bluemix.wizard.CloudSpaceBluemixWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for com.ibm.xsp.extlib.designer.bluemix.wizard.CloudSpaceBluemixWizardPage.java

Source

/*
 *  Copyright IBM Corp. 2015, 2016
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at:
 * 
 * http://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
 * implied. See the License for the specific language governing 
 * permissions and limitations under the License.
 */

package com.ibm.xsp.extlib.designer.bluemix.wizard;

import java.net.URI;
import java.util.ArrayList;
import java.util.List;

import org.cloudfoundry.client.lib.CloudFoundryClient;
import org.cloudfoundry.client.lib.domain.CloudOrganization;
import org.cloudfoundry.client.lib.domain.CloudSpace;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.window.ToolTip;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ControlListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;

import com.ibm.commons.util.StringUtil;
import com.ibm.designer.domino.preferences.DominoPreferenceManager;
import com.ibm.xsp.extlib.designer.bluemix.preference.PreferencePage;
import com.ibm.xsp.extlib.designer.bluemix.util.BluemixUtil;
import com.ibm.xsp.extlib.designer.tooling.utils.AbstractWizardPage;
import com.ibm.xsp.extlib.designer.tooling.utils.WizardUtils;

import static com.ibm.xsp.extlib.designer.bluemix.preference.PreferenceKeys.*;

/**
 * @author Gary Marjoram
 *
 */
public class CloudSpaceBluemixWizardPage extends AbstractWizardPage
        implements ControlListener, ISelectionChangedListener {

    private TableViewer _orgViewer;
    private TableViewer _spaceViewer;
    private CloudFoundryClient _client;
    private List<CloudOrganization> _orgs;
    private List<CloudSpace> _spaces;

    protected CloudSpaceBluemixWizardPage(String pageName) {
        super(pageName);
    }

    @Override
    protected String getPageTitle() {
        return "Organization and Space"; // $NLX-CloudSpaceBluemixWizardPage.OrganizationSpace-1$
    }

    @Override
    protected String getPageMsg() {
        return "Choose the organization and space for deployment."; // $NLX-CloudSpaceBluemixWizardPage.ChoosetheOrganizationandSpaceford-1$
    }

    @Override
    public void createControl(Composite parent) {
        super.createControl(parent);

        Composite container = new Composite(parent, SWT.NONE);
        container.setLayout(WizardUtils.createGridLayout(2, 5));

        WizardUtils.createLabel(container, "Organizations:", 1, 0, true, GridData.FILL_HORIZONTAL); // $NLX-CloudSpaceBluemixWizardPage.Organizations-1$
        WizardUtils.createLabel(container, "Spaces:", 1, 0, true, GridData.FILL_HORIZONTAL); // $NLX-CloudSpaceBluemixWizardPage.Spaces-1$

        _orgViewer = WizardUtils.createTableViewer(container, 1, 1, null,
                SWT.FULL_SELECTION | SWT.BORDER | SWT.V_SCROLL);
        ColumnViewerToolTipSupport.enableFor(_orgViewer, ToolTip.NO_RECREATE);
        _orgViewer.getTable().setToolTipText("Choose organization"); // $NLX-CloudSpaceBluemixWizardPage.ChooseOrganization-1$
        _orgViewer.getTable().setHeaderVisible(false);
        _orgViewer.getTable().setLinesVisible(false);
        _orgViewer.getTable().addControlListener(this);
        _orgViewer.setContentProvider(new ArrayContentProvider());
        _orgViewer.addSelectionChangedListener(this);

        // Create the only column
        TableViewerColumn col = new TableViewerColumn(_orgViewer, SWT.LEFT);
        col.getColumn().setResizable(false);
        col.setLabelProvider(new ColumnLabelProvider());

        _spaceViewer = WizardUtils.createTableViewer(container, 1, 1, null,
                SWT.FULL_SELECTION | SWT.BORDER | SWT.V_SCROLL);
        ColumnViewerToolTipSupport.enableFor(_spaceViewer, ToolTip.NO_RECREATE);
        _spaceViewer.getTable().setToolTipText("Choose space"); // $NLX-CloudSpaceBluemixWizardPage.ChooseSpace-1$
        _spaceViewer.getTable().setHeaderVisible(false);
        _spaceViewer.getTable().setLinesVisible(false);
        _spaceViewer.getTable().addControlListener(this);
        _spaceViewer.setContentProvider(new ArrayContentProvider());
        _spaceViewer.addSelectionChangedListener(this);

        // Create the only column
        col = new TableViewerColumn(_spaceViewer, SWT.LEFT);
        col.getColumn().setResizable(false);
        col.setLabelProvider(new ColumnLabelProvider());

        setControl(container);
    }

    @Override
    protected void initialisePageState() {
        String savedOrg = DominoPreferenceManager.getInstance().getValue(KEY_BLUEMIX_CLOUDSPACE_ORG, false);
        String savedSpace = DominoPreferenceManager.getInstance().getValue(KEY_BLUEMIX_CLOUDSPACE_SPACE, false);

        String[] orgs = getOrgs();
        _orgViewer.setInput(orgs);
        int orgIdx = orgs.length > 0 ? 0 : -1;
        for (int i = 0; i < orgs.length; i++) {
            if (StringUtil.equalsIgnoreCase(orgs[i], savedOrg)) {
                orgIdx = i;
                break;
            }
        }

        _orgViewer.getTable().select(orgIdx);
        updateSpaces(orgIdx, savedSpace);
    }

    @Override
    public void controlResized(ControlEvent event) {
        Table table = (Table) event.widget;
        table.getColumn(0).setWidth(table.getClientArea().width);
    };

    @Override
    public void controlMoved(ControlEvent event) {
    }

    @Override
    public void selectionChanged(SelectionChangedEvent event) {
        if (event.getSource() == _orgViewer) {
            updateSpaces(_orgViewer.getTable().getSelectionIndex(), null);
        }
        _hasChanged = true;
    }

    public void updateSpaces(int orgIdx, String space) {
        if (orgIdx >= 0) {
            String[] spaces = getSpaces(_orgs.get(orgIdx).getName());
            int spaceIdx = 0;
            for (int i = 0; i < spaces.length; i++) {
                if (StringUtil.equalsIgnoreCase(spaces[i], space)) {
                    spaceIdx = i;
                    break;
                }
            }
            _spaceViewer.setInput(spaces);
            _spaceViewer.refresh();
            _spaceViewer.getTable().select(spaceIdx);
        } else {
            _spaceViewer.setInput(null);
            _spaceViewer.refresh();
        }
        validatePage();
    }

    private String[] getOrgs() {
        ArrayList<String> list = new ArrayList<String>();
        for (CloudOrganization org : _orgs) {
            list.add(org.getName());
        }
        return list.toArray(new String[list.size()]);
    }

    private String[] getSpaces(String org) {
        ArrayList<String> list = new ArrayList<String>();
        for (CloudSpace space : _spaces) {
            if (StringUtil.equalsIgnoreCase(org, space.getOrganization().getName())) {
                list.add(space.getName());
            }
        }
        return list.toArray(new String[list.size()]);
    }

    public String getOrg() {
        if (!_orgViewer.getTable().isDisposed()) {
            return _orgs.get(_orgViewer.getTable().getSelectionIndex()).getName();
        }
        return "";
    }

    public String getSpace() {
        if (!_spaceViewer.getTable().isDisposed()) {
            return (getSpaces(getOrg())[_spaceViewer.getTable().getSelectionIndex()]);
        }
        return "";
    }

    @Override
    protected void validatePage() {
        if (_spaceViewer.getTable().getSelectionIndex() >= 0) {
            showError(null);
        } else {
            showError("You must select a Cloud Space"); // $NLX-CloudSpaceBluemixWizardPage.YoumustselectaCloudSpace-1$
        }
    }

    @Override
    protected void savePageState() {
        DominoPreferenceManager.getInstance().setValue(KEY_BLUEMIX_CLOUDSPACE_ORG, getOrg());
        DominoPreferenceManager.getInstance().setValue(KEY_BLUEMIX_CLOUDSPACE_SPACE, getSpace());
    }

    public IRunnableWithProgress getOrgsAndSpaces = new IRunnableWithProgress() {
        public void run(IProgressMonitor monitor) {
            try {
                monitor.beginTask(BluemixUtil.productizeString("%BM_PRODUCT%"), IProgressMonitor.UNKNOWN); // $NON-NLS-1$

                if (_client == null) {
                    try {
                        monitor.subTask("Connecting to Server..."); // $NLX-CloudSpaceBluemixWizardPage.ConnectingtoServer-1$
                        String target = PreferencePage.getSecurePreference(KEY_BLUEMIX_SERVER_URL, "");
                        _client = new CloudFoundryClient(((AbstractBluemixWizard) _wiz)._credentials,
                                URI.create(target).toURL());
                        _client.login();
                    } catch (Exception e) {
                        throw new Exception("Error connecting to Server", e); // $NLX-CloudSpaceBluemixWizardPage.ErrorconnectingtoServer-1$
                    }
                }

                try {
                    monitor.subTask("Retrieving organizations..."); // $NLX-CloudSpaceBluemixWizardPage.Retrievingorganizations-1$
                    _orgs = _client.getOrganizations();
                } catch (Exception e) {
                    throw new Exception("Error retrieving organizations", e); // $NLX-CloudSpaceBluemixWizardPage.Errorretrievingorganizations-1$
                }

                try {
                    monitor.subTask("Retrieving spaces..."); // $NLX-CloudSpaceBluemixWizardPage.Retrievingspaces-1$
                    _spaces = _client.getSpaces();
                } catch (Exception e) {
                    throw new Exception("Error retrieving spaces", e); // $NLX-CloudSpaceBluemixWizardPage.Errorretrievingspaces-1$
                }

                monitor.done();
            } catch (Exception e) {
                ((AbstractBluemixWizard) _wiz).setJobException(e);
                _client = null;
            }
        }
    };
}