Package org.dcarew.googledocs.preferences

Source Code of org.dcarew.googledocs.preferences.DocsPreferencePage

/*
* DocsPreferencePage.java
*
* Copyright (c) 2007
*
* 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.googledocs.preferences;

import org.dcarew.googledocs.DocsCredentials;
import org.dcarew.googledocs.DocsPlugin;
import org.dcarew.googledocs.utils.DocsUtils;
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;

import com.google.gdata.client.spreadsheet.SpreadsheetService;
import com.google.gdata.util.AuthenticationException;

/**
* The preference page or the Google Docs plugin. This page allows the user to enter their Google
* Account information.
*
* @author Devon Carew
*/
public class DocsPreferencePage
  extends PreferencePage
  implements IWorkbenchPreferencePage
{
  private Button   testAccountButton;
  private Text  userNameText;
  private Text  passwordText;
 
 
  public DocsPreferencePage()
  {
    setPreferenceStore(DocsPlugin.getDefault().getPreferenceStore());
    setDescription("Enter your Google Account authorization information. If you do not have an account, you can create one at http://docs.google.com.");
   
    noDefaultAndApplyButton();
  }
 
  public void init(IWorkbench workbench)
  {
   
  }
 
  protected Control createContents(Composite prefPageParent)
  {
    setTitle("Google Docs && Spreadsheets");
   
    Composite parent = new Composite(prefPageParent, SWT.NONE);
    GridLayout parentLayout = new GridLayout();
    parentLayout.marginWidth = 0;
    parentLayout.marginHeight = 0;
    parent.setLayout(parentLayout);
   
    Group group = new Group(parent, SWT.NONE);
    group.setText("Authorization");
    GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
    gridData.verticalIndent = 15;
    group.setLayoutData(gridData);
    group.setLayout(new GridLayout(2, false));
   
    // Account email
    Label label = new Label(group, SWT.NONE);
    label.setText("Account Email:");
   
    userNameText = new Text(group, SWT.SINGLE | SWT.BORDER);
    userNameText.setTextLimit(100);
    userNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    userNameText.addModifyListener(new ModifyListener() {
      public void modifyText(ModifyEvent e) {
        updateTestButton();
      }
    });
   
    // Password
    label = new Label(group, SWT.NONE);
    label.setText("Password:");
   
    passwordText = new Text(group, SWT.SINGLE | SWT.PASSWORD | SWT.BORDER);
    passwordText.setTextLimit(100);
    passwordText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    passwordText.addModifyListener(new ModifyListener() {
      public void modifyText(ModifyEvent e) {
        updateTestButton();
      }
    });
   
    updateFromPreferences();
   
    return parent;
  }
 
  protected void contributeButtons(Composite parent)
  {
    super.contributeButtons(parent);
   
    ((GridLayout) parent.getLayout()).numColumns++;
   
    testAccountButton = new Button(parent, SWT.PUSH);
    testAccountButton.setText("Test Account");
    testAccountButton.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent event) {
        performAccountTest();
      }
    });
   
    updateTestButton();
  }
 
  private void updateFromPreferences()
  {
    DocsCredentials userCredentials = DocsPlugin.getUserCredentials();
   
    if (userCredentials != null)
    {
      userNameText.setText(userCredentials.getUserName());
      passwordText.setText(userCredentials.getPassword());
    }
  }
 
  public boolean performOk()
  {
    DocsPlugin.setUserCredentials(userNameText.getText().trim(), passwordText.getText().trim());
   
    return true;
  }
 
  private void updateTestButton()
  {
    if (testAccountButton == null || testAccountButton.isDisposed())
      return;
   
    clearMessage();
   
    String user = userNameText.getText();
    String pass = passwordText.getText();
   
    if (user == null || user.trim().length() == 0)
      testAccountButton.setEnabled(false);
    else if (pass == null || pass.trim().length() == 0)
      testAccountButton.setEnabled(false);
    else
      testAccountButton.setEnabled(true);
  }
 
  private void performAccountTest()
  {
    final String user = userNameText.getText().trim();
    final String pass = passwordText.getText().trim();
   
    clearMessage();
   
    BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() {
      public void run()
      {
        try
        {
          testLogin(user, pass);
         
          setMessage("Authorization succeeded.", INFORMATION);
        }
        catch (AuthenticationException authException)
        {
          setMessage(authException.getMessage(), ERROR);
        }
       
        clearMessageDelayed(3000);
      }
    });
  }
 
  private void clearMessage()
  {
    if (testAccountButton != null && !testAccountButton.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()
      {
        DocsUtils.sleepMillis(millis);
       
        display.asyncExec(new Runnable() {
          public void run()
          {
            if (DocsUtils.safeEquals(oldMessage, getMessage()))
            {
              clearMessage();
            }
          }
        });
      }
    }).start();
  }
 
  private static void testLogin(String userName, String password)
    throws AuthenticationException
  {
    SpreadsheetService service = new SpreadsheetService(DocsPlugin.APPLICATION_NAME);
   
    service.setUserCredentials(userName, password);
  }
 
}
TOP

Related Classes of org.dcarew.googledocs.preferences.DocsPreferencePage

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.