Package org.dcarew.hudson

Source Code of org.dcarew.hudson.HudsonStartup

/*
* 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 java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

import org.dcarew.hudson.utils.LabelContributionItem;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.action.StatusLineManager;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.IStartup;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.browser.IWebBrowser;
import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.ui.internal.WorkbenchWindow;

/**
* The IStartup item for the Halo status project. This is run an Eclipse startup and adds our
* contribution item to the status line.
*
* @author Devon Carew
*/
public class HudsonStartup
  implements IStartup
{
  private static HudsonStartup hudsonStartup;
 
 
  private LabelContributionItem   label;
 
  private boolean         hasError;
 
  private String          currentView;
 
  private List          views;
 
 
  public HudsonStartup()
  {
    hudsonStartup = this;
  }
 
  /**
   * Called by the workspace after general statup.
   */
  public void earlyStartup()
  {
    PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
        public void run() {
          addStatusLineContribution();
        }
    });
  }
 
  public static HudsonStartup getStartup()
  {
    return hudsonStartup;
  }
 
  public void update(boolean allOK, boolean hasRunning, String text, String tooltip,
    String currentView, List views)
  {
    setHudsonStatus(label, allOK, hasRunning, text, tooltip, currentView, views);
  }
 
  public void updateError(String text, String tooltip)
  {
    setHudsonStatusError(label, text, tooltip);
  }
 
  /**
   * Adds the cruise control status line contrubution. This must be called from the display thread.
   */
  private void addStatusLineContribution()
  {
    IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows();
   
    if (windows.length < 1)
      throw new IllegalStateException("should be at least one workbench window");
   
    WorkbenchWindow window = (WorkbenchWindow)windows[0];
   
    final StatusLineManager statusLineManager = window.getStatusLineManager();
   
    label = new LabelContributionItem(HudsonPlugin.PLUGIN_ID + ".statusContribution", new LabelMenuCreator());
    label.setDoubleClickAction(new Action("doubleClick") {
      public void run() {
        handleDoubleClick();
      }
    });
   
    statusLineManager.add(new Separator("hudson"));
    statusLineManager.appendToGroup("hudson", label);
   
    statusLineManager.update(true);
  }
 
  private void setCurrentView(String name)
  {
    HudsonPlugin.setHudsonView(name);
   
    HudsonUpdateJob.refresh();
  }
 
  private void handleDoubleClick()
  {
    // If no URL is set or there's a communications error, open the
    // preference page. Otherwise, open a browser.
   
    String url = HudsonPlugin.getBaseURL();
   
    if (hasError || url == null || url.length() == 0)
    {
      PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(
        Display.getDefault().getActiveShell(), HudsonPreferencePage.PAGE_ID, null, null);
     
      if (dialog != null)
        dialog.open();
    }
    else
    {
      IWorkbenchBrowserSupport browserSupport = PlatformUI.getWorkbench().getBrowserSupport();
     
      try
      {
        if (browserSupport != null)
        {
          IWebBrowser browser = browserSupport.createBrowser(
            IWorkbenchBrowserSupport.NAVIGATION_BAR, "HudsonBrowser", null, null);
         
          if (browser != null)
          {
            browser.openURL(new URL(url));
           
            return;
          }
        }
      }
      catch (PartInitException exception)
      {
        HudsonPlugin.log(exception);
      }
      catch (MalformedURLException exception)
      {
        HudsonPlugin.log(exception);
      }
    }
  }

  private void setHudsonStatus(
    final LabelContributionItem label,
    final boolean allOK,
    final boolean hasRunning,
    final String status,
    final String tooltip,
    String currentView,
    List views)
  {
    this.currentView = currentView;
    this.views = views;
   
    hasError = false;
   
    if (label == null)
      return;
   
    Display.getDefault().asyncExec(new Runnable() {
      public void run() {
        if (allOK)
        {
          if (hasRunning)
            label.setImage(HudsonPlugin.getImage("resources/icons/hudsonok_run.gif"));
          else
            label.setImage(HudsonPlugin.getImage("resources/icons/hudsonok.gif"));
        }
        else
        {
          if (hasRunning)
            label.setImage(HudsonPlugin.getImage("resources/icons/hudsonfail_run.gif"));
          else
            label.setImage(HudsonPlugin.getImage("resources/icons/hudsonfail.gif"));
        }
       
        label.setText(status);
        label.setTooltip(tooltip);
      }
    });
  }
 
  private void setHudsonStatusError(
    final LabelContributionItem label,
    final String status,
    final String tooltip)
  {
    hasError = true;
   
    if (label == null)
      return;
   
    Display.getDefault().asyncExec(new Runnable() {
      public void run() {
        label.setImage(HudsonPlugin.getImage("resources/icons/hudsonfail2.gif"));
        label.setText("Error");
        label.setTooltip(tooltip);
      }
    });
  }
 
  class LabelMenuCreator
    implements IMenuCreator
  {
    public Menu getMenu(Control parent)
    {
      Menu menu = new Menu(parent);
     
      MenuItem item = new MenuItem(menu, SWT.NONE);
      item.setText("Open Hudson Dashboard");
      item.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent event) {
          handleDoubleClick();
        }
      });
     
      item = new MenuItem(menu, SWT.NONE);
      item.setText("Preferences...");
      item.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent event) {
          PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(
            Display.getDefault().getActiveShell(), HudsonPreferencePage.PAGE_ID, null, null);
         
          if (dialog != null)
            dialog.open();
        }
      });
     
      new MenuItem(menu, SWT.SEPARATOR);
     
      // Add the Hudson views.
      if (views != null)
      {
        for (int i = 0; i < views.size(); i++)
        {
          final String name = (String)views.get(i);
         
          item = new MenuItem(menu, SWT.CHECK);
          item.setText(name);
          item.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
              setCurrentView(name);
            }
          });
         
          if (name.equals(currentView))
          {
            item.setSelection(true);
          }
        }
      }
     
      return menu;
    }
   
    public Menu getMenu(Menu parent)
    {
      return null;
    }
   
    public void dispose()
    {
     
    }
  }

}
TOP

Related Classes of org.dcarew.hudson.HudsonStartup

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.