Package org.cloudfoundry.ide.eclipse.server.ui.internal

Source Code of org.cloudfoundry.ide.eclipse.server.ui.internal.CloudFoundryCredentialsPart

/*******************************************************************************
* Copyright (c) 2012, 2014 Pivotal Software, Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of 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.
*  Contributors:
*     Pivotal Software, Inc. - initial API and implementation
*     Keith Chong, IBM - Modify Sign-up so it's more brand-friendly
********************************************************************************/
package org.cloudfoundry.ide.eclipse.server.ui.internal;

import org.cloudfoundry.ide.eclipse.server.core.internal.CloudFoundryBrandingExtensionPoint;
import org.cloudfoundry.ide.eclipse.server.core.internal.CloudFoundryConstants;
import org.cloudfoundry.ide.eclipse.server.core.internal.CloudFoundryPlugin;
import org.cloudfoundry.ide.eclipse.server.core.internal.CloudFoundryServer;
import org.cloudfoundry.ide.eclipse.server.core.internal.ValidationEvents;
import org.cloudfoundry.ide.eclipse.server.ui.internal.editor.CloudUrlWidget;
import org.cloudfoundry.ide.eclipse.server.ui.internal.wizards.RegisterAccountWizard;
import org.cloudfoundry.ide.eclipse.server.ui.internal.wizards.WizardHandleContext;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.osgi.util.NLS;
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.Label;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;
import org.eclipse.wst.server.ui.wizard.IWizardHandle;

/**
* @author Andy Clement
* @author Christian Dupuis
* @author Leo Dos Santos
* @author Steffen Pingel
* @author Terry Denney
* @author Nieraj Singh
*/
public class CloudFoundryCredentialsPart extends UIPart implements IPartChangeListener {

  private CloudFoundryServer cfServer;

  private Text emailText;

  private TabFolder folder;

  private Text passwordText;

  private String serverTypeId;

  private String service;

  private CloudUrlWidget urlWidget;

  private Button validateButton;

  private Button registerAccountButton;

  private Button cfSignupButton;

  private IRunnableContext runnableContext;

  public CloudFoundryCredentialsPart(CloudFoundryServer cfServer, WizardPage wizardPage) {
    this(cfServer);

    if (wizardPage != null) {
      wizardPage.setTitle(NLS.bind(Messages.CloudFoundryCredentialsPart_TEXT_CREDENTIAL_WIZ_TITLE, service));
      wizardPage.setDescription(Messages.SERVER_WIZARD_VALIDATOR_CLICK_TO_VALIDATE);
      ImageDescriptor banner = CloudFoundryImages.getWizardBanner(serverTypeId);
      if (banner != null) {
        wizardPage.setImageDescriptor(banner);
      }
      runnableContext = wizardPage.getWizard() != null && wizardPage.getWizard().getContainer() != null ? wizardPage
          .getWizard().getContainer() : null;
    }
  }

  public CloudFoundryCredentialsPart(CloudFoundryServer cfServer, final WizardHandleContext context) {
    this(cfServer);
    IWizardHandle wizardHandle = context.getWizardHandle();
    if (wizardHandle != null) {
      wizardHandle.setTitle(NLS.bind(Messages.CloudFoundryCredentialsPart_TEXT_CREDENTIAL_WIZ_TITLE, service));
      wizardHandle.setDescription(Messages.SERVER_WIZARD_VALIDATOR_CLICK_TO_VALIDATE);
      ImageDescriptor banner = CloudFoundryImages.getWizardBanner(serverTypeId);
      if (banner != null) {
        wizardHandle.setImageDescriptor(banner);
      }

      runnableContext = context.getRunnableContext();
    }
  }

  public CloudFoundryCredentialsPart(CloudFoundryServer cfServer) {

    this.cfServer = cfServer;
    this.serverTypeId = cfServer.getServer().getServerType().getId();
    this.service = CloudFoundryBrandingExtensionPoint.getServiceName(serverTypeId);

    runnableContext = PlatformUI.getWorkbench().getProgressService();
  }

  public Control createPart(Composite parent) {

    Composite composite = new Composite(parent, SWT.NONE);
    composite.setLayout(new GridLayout());
    composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    folder = new TabFolder(composite, SWT.NONE);
    folder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    folder.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        updateUI(false);
      }
    });

    try {
      createExistingUserComposite(folder);
      updateUI(false);
    }
    catch (Throwable e1) {
      CloudFoundryPlugin.logError(e1);
    }

    return composite;

  }

  public void setServer(CloudFoundryServer server) {
    this.cfServer = server;
  }

  private void createExistingUserComposite(TabFolder folder) {
    Composite composite = new Composite(folder, SWT.NONE);
    composite.setLayout(new GridLayout());
    composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Composite topComposite = new Composite(composite, SWT.NONE);
    topComposite.setLayout(new GridLayout(2, false));
    topComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    Label emailLabel = new Label(topComposite, SWT.NONE);
    emailLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
    emailLabel.setText(Messages.COMMONTXT_EMAIL_WITH_COLON);

    emailText = new Text(topComposite, SWT.BORDER);
    emailText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    emailText.setEditable(true);
    emailText.setFocus();
    if (cfServer.getUsername() != null) {
      emailText.setText(cfServer.getUsername());
    }

    emailText.addModifyListener(new ModifyListener() {
      public void modifyText(ModifyEvent e) {
        cfServer.setUsername(emailText.getText());
        updateUI(false);
      }
    });

    Label passwordLabel = new Label(topComposite, SWT.NONE);
    passwordLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
    passwordLabel.setText(Messages.COMMONTXT_PW);

    passwordText = new Text(topComposite, SWT.PASSWORD | SWT.BORDER);
    passwordText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    passwordText.setEditable(true);
    if (cfServer.getPassword() != null) {
      passwordText.setText(cfServer.getPassword());
    }

    passwordText.addModifyListener(new ModifyListener() {
      public void modifyText(ModifyEvent e) {
        cfServer.setPassword(passwordText.getText());

        updateUI(false);
      }
    });

    urlWidget = new CloudUrlWidget(cfServer) {

      @Override
      protected void setUpdatedSelectionInServer() {

        super.setUpdatedSelectionInServer();

        updateUI(false);
      }

    };

    urlWidget.createControls(topComposite);

    String url = urlWidget.getURLSelection();
    if (url != null) {
      cfServer.setUrl(CloudUiUtil.getUrlFromDisplayText(url));
    }

    final Composite validateComposite = new Composite(composite, SWT.NONE);
    validateComposite.setLayout(new GridLayout(3, false));
    validateComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    validateButton = new Button(validateComposite, SWT.PUSH);
    validateButton.setText(Messages.CloudFoundryCredentialsPart_TEXT_VALIDATE_BUTTON);
    validateButton.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent event) {

        updateUI(true);

      }
    });

    registerAccountButton = new Button(validateComposite, SWT.PUSH);
    registerAccountButton.setText(Messages.CloudFoundryCredentialsPart_TEXT_REGISTER_BUTTON);
    registerAccountButton.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent event) {
        RegisterAccountWizard wizard = new RegisterAccountWizard(cfServer);
        WizardDialog dialog = new WizardDialog(validateComposite.getShell(), wizard);
        if (dialog.open() == Window.OK) {
          if (wizard.getEmail() != null) {
            emailText.setText(wizard.getEmail());
          }
          if (wizard.getPassword() != null) {
            passwordText.setText(wizard.getPassword());
          }
        }
      }
    });

    cfSignupButton = new Button(validateComposite, SWT.PUSH);
    cfSignupButton.setText(CloudFoundryConstants.PUBLIC_CF_SERVER_SIGNUP_LABEL);
    cfSignupButton.addSelectionListener(new SelectionAdapter() {

      public void widgetSelected(SelectionEvent event) {
        String signupURL = CloudFoundryBrandingExtensionPoint.getSignupURL(serverTypeId, cfServer.getUrl());
        if (signupURL != null) {
          CloudFoundryURLNavigation nav = new CloudFoundryURLNavigation(signupURL);
          nav.navigateExternal();
        }
      }
    });

    TabItem item = new TabItem(folder, SWT.NONE);
    item.setText(Messages.COMMONTXT_ACCOUNT_INFO);
    item.setControl(composite);
  }

  /**
   *
   * @param validateCredentials true if credentials should be validated, which
   * would require a network I/O request sent to the server. False if only
   * local validation should be performed (e.g. check for malformed URL)
   */
  public void updateUI(boolean validateAgainstServer) {

    // If validating against a server, it means a user explicitly requested
    // a credentials validation against server.

    int eventType = validateAgainstServer ? ValidationEvents.SERVER_AUTHORISATION
        : ValidationEvents.CREDENTIALS_FILLED;
    notifyChange(new PartChangeEvent(runnableContext, Status.OK_STATUS, this, eventType));
    updateButtons();

  }

  protected void updateButtons() {
    String url = cfServer.getUrl();
    cfSignupButton.setEnabled(CloudFoundryURLNavigation.canEnableCloudFoundryNavigation(serverTypeId, url));

    registerAccountButton.setEnabled(CloudFoundryBrandingExtensionPoint.supportsRegistration(serverTypeId, url));

  }

  public void handleChange(PartChangeEvent event) {
    if (event == null) {
      return;
    }
    int type = event.getType();
    boolean valuesFilled = (type == ValidationEvents.VALIDATION || type == ValidationEvents.SELF_SIGNED)
        && (event.getStatus() != null && event.getStatus().isOK());

    // If the credentials have changed and do not match those used to
    // previously
    // set a space descriptor, clear the space descriptor

    validateButton.setEnabled(valuesFilled);

  }
}
TOP

Related Classes of org.cloudfoundry.ide.eclipse.server.ui.internal.CloudFoundryCredentialsPart

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.