Package org.dcarew.hudson

Source Code of org.dcarew.hudson.HudsonPreferencePage

/*
* Copyright (c) 2009
*
* 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 org.dcarew.hudson;

import org.dcarew.hudson.utils.HudsonUtils;
import org.dcarew.hudson.utils.NotificationUtils;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
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.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

/**
*
*
* @author Devon Carew
*/
public class HudsonPreferencePage
  extends PreferencePage
  implements IWorkbenchPreferencePage
{
  public static final String PAGE_ID = "org.dcarew.hudson.prefPage";
 
  private Text     urlText;
  private Button     selfSignedButton;
 
  private Text     usernameText;
  private Text     passwordText;
 
  private Button    notificationButton;
 
 
  /**
   *
   */
  public HudsonPreferencePage()
  {
    super("Hudson");
   
    setDescription("Hudson plugin version " + HudsonPlugin.getVersion() + ".");
   
    noDefaultAndApplyButton();
  }
 
  public void init(IWorkbench workbench)
  {
   
  }
 
  protected Control createContents(Composite parent)
  {
    // Server url group
    Group group = new Group(parent, SWT.NONE);
    group.setText("Hudson Server");
    group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    group.setLayout(new GridLayout(2, false));
   
    Label label = new Label(group, SWT.NONE);
    label.setText("Server URL:");
   
    urlText = new Text(group, SWT.SINGLE | SWT.BORDER);
    urlText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    urlText.addModifyListener(new ModifyListener() { 
      public void modifyText(ModifyEvent event) {
        verifyURLText();
      }
    });
   
    label = new Label(group, SWT.NONE);
   
    selfSignedButton = new Button(group, SWT.CHECK);
    selfSignedButton.setText("Allow self-signed certificates");
   
    // authentication group
    group = new Group(parent, SWT.NONE);
    group.setText("Authentication Information");
    group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    group.setLayout(new GridLayout(2, false));
   
    label = new Label(group, SWT.NONE);
    label.setText("User Name:");
   
    usernameText = new Text(group, SWT.SINGLE | SWT.BORDER);
    usernameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
   
    label = new Label(group, SWT.NONE);
    label.setText("Password:");
   
    passwordText = new Text(group, SWT.SINGLE | SWT.BORDER | SWT.PASSWORD);
    passwordText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
   
    // Notification group
    if (NotificationUtils.isMylynAvailable())
    {
      group = new Group(parent, SWT.NONE);
      group.setText("Notifications");
      group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
      group.setLayout(new GridLayout());
     
      notificationButton = new Button(group, SWT.CHECK);
      notificationButton.setText("Show notifications for build failures");
    }
   
    // Test connection button
    Button testConnection = new Button(parent, SWT.PUSH);
    testConnection.setText("Test Connection...");
    testConnection.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END
      | GridData.VERTICAL_ALIGN_END | GridData.GRAB_VERTICAL));
    testConnection.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent event) {
        testConnection();
      }     
    });
   
    initFromPreferences();
   
    return parent;
  }
 
  private void initFromPreferences()
  {
    urlText.setText(HudsonPlugin.getBaseURL());
    selfSignedButton.setSelection(HudsonPlugin.getAllowSelfSigned());
   
    HudsonCredentials credentials = HudsonPlugin.getUserCredentials();
   
    if (credentials != null)
    {
      usernameText.setText(credentials.getUserName());
      passwordText.setText(credentials.getPassword());
    }
   
    if (notificationButton != null)
    {
      notificationButton.setSelection(!HudsonPlugin.getDontNotify());
    }
  }
 
  public boolean performOk()
  {
    HudsonPlugin.setBaseURL(urlText.getText());
    HudsonPlugin.setAllowSelfSigned(selfSignedButton.getSelection());
    HudsonPlugin.setUserCredentials(usernameText.getText(), passwordText.getText());
   
    HudsonUpdateJob.refresh();
   
    if (notificationButton != null)
    {
      HudsonPlugin.setDontNotify(!notificationButton.getSelection());
    }
   
    return super.performOk();
  }
 
  protected void verifyURLText()
  {
    String text = urlText.getText();
   
    if (text.length() > 0 && !text.endsWith("/"))
    {
      setMessage("URL must end with /", IMessageProvider.WARNING);
    }
    else
    {
      clearMessage();
    }
  }
 
  protected void testConnection()
  {
    final HudsonCommunications comm = new HudsonCommunications();
   
    comm.setBaseURL(urlText.getText());
    comm.setAllowSelfSigned(selfSignedButton.getSelection());
    comm.setUsername(usernameText.getText());
    comm.setPassword(passwordText.getText());
   
    BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() {
      public void run()
      {
        if (comm.updateStatus())
        {
          setMessage("Connection successful.", IMessageProvider.INFORMATION);
         
          clearMessageDelayed(2000);
        }
        else
        {
          setMessage(comm.getSummary(), IMessageProvider.WARNING);
        }
      }
    });
  }
 
  private void clearMessage()
  {
    if (urlText != null && !urlText.isDisposed())
    {
      setMessage(null);
    }
  }
 
  private void clearMessageDelayed(final int millis)
  {
    final String   oldMessage = getMessage();
    final Display   display = getShell().getDisplay();
   
    new Thread(new Runnable() {
      public void run()
      {
        HudsonUtils.sleepMillis(millis);
       
        display.asyncExec(new Runnable() {
          public void run()
          {
            if (HudsonUtils.safeEquals(oldMessage, getMessage()))
            {
              clearMessage();
            }
          }
        });
      }
    }).start();
  }
 
}
TOP

Related Classes of org.dcarew.hudson.HudsonPreferencePage

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.