Package dk.contix.eclipse.hudson.views

Source Code of dk.contix.eclipse.hudson.views.HudsonView

package dk.contix.eclipse.hudson.views;


import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.browser.IWebBrowser;
import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
import org.eclipse.ui.part.ViewPart;

import dk.contix.eclipse.hudson.Activator;
import dk.contix.eclipse.hudson.HudsonClient;
import dk.contix.eclipse.hudson.Job;
import dk.contix.eclipse.hudson.JobContentProvider;


/**
* This sample class demonstrates how to plug-in a new
* workbench view. The view shows data obtained from the
* model. The sample creates a dummy model on the fly,
* but a real implementation would connect to the model
* available either in this or another plug-in (e.g. the workspace).
* The view is connected to the model using a content provider.
* <p>
* The view uses a label provider to define how model
* objects should be presented in the view. Each
* view can present the same model objects using
* different labels and icons, if needed. Alternatively,
* a single label provider can be shared between views
* in order to ensure that objects of the same type are
* presented in the same way everywhere.
* <p>
*/

public class HudsonView extends ViewPart {
  private TableViewer viewer;
  private Action scheduleAction;
  private Action refreshAction;
  private String baseUrl;

  /**
   * The constructor.
   */
  public HudsonView() {
  }

  /**
   * This is a callback that will allow us
   * to create the viewer and initialize it.
   */
  public void createPartControl(Composite parent) {
    configurePreferences();
    viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);

    Table t = viewer.getTable();
    t.setLayout(new GridLayout());
    t.setLayoutData(new GridData(GridData.FILL_BOTH));
    TableColumn col = new TableColumn(t, SWT.NONE);
    col.setText("Project");
   
    col = new TableColumn(t, SWT.LEFT);
    col.setText("Status");
   
    col = new TableColumn(t, SWT.LEFT);
    col.setText("");
    col.setWidth(20);
    t.setHeaderVisible(true);
   
    viewer.setColumnProperties(new String[] {"Project", "Status", ""});
    viewer.setContentProvider(new JobContentProvider(viewer));
    viewer.setLabelProvider(new JobLabelProvider());
    viewer.setSorter(new JobSorter());
    viewer.setInput(getViewSite());
    makeActions();
    hookContextMenu();
    hookDoubleClickAction();
    contributeToActionBars();
   
    for (int i = 0; i < 2; i++) {
      t.getColumn(i).pack();
    }
  }

  private void configurePreferences() {
    final Preferences prefs = Activator.getDefault().getPluginPreferences();
    prefs.addPropertyChangeListener(new Preferences.IPropertyChangeListener() {
      public void propertyChange(PropertyChangeEvent event) {
        baseUrl = prefs.getString(Activator.PREF_BASE_URL);
        viewer.refresh();
      }
    });
    baseUrl = prefs.getString(Activator.PREF_BASE_URL);
  }

  private void hookContextMenu() {
    MenuManager menuMgr = new MenuManager("#PopupMenu");
    menuMgr.setRemoveAllWhenShown(true);
    menuMgr.addMenuListener(new IMenuListener() {
      public void menuAboutToShow(IMenuManager manager) {
        HudsonView.this.fillContextMenu(manager);
      }
    });
    Menu menu = menuMgr.createContextMenu(viewer.getControl());
    viewer.getControl().setMenu(menu);
    getSite().registerContextMenu(menuMgr, viewer);
  }

  private void contributeToActionBars() {
    IActionBars bars = getViewSite().getActionBars();
    fillLocalToolBar(bars.getToolBarManager());
  }

  private void fillContextMenu(IMenuManager manager) {
    manager.add(scheduleAction);
    manager.add(refreshAction);
    // Other plug-ins can contribute there actions here
    manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
  }
 
  private void fillLocalToolBar(IToolBarManager manager) {
    manager.add(scheduleAction);
    manager.add(refreshAction);
  }

  private void makeActions() {
    scheduleAction = new Action() {
      public void run() {
        IStructuredSelection sel = (IStructuredSelection) viewer.getSelection();
        final Job j = (Job) sel.getFirstElement();
       
        org.eclipse.core.runtime.jobs.Job sj = new org.eclipse.core.runtime.jobs.Job("Scheduling Hudson build") {
          protected IStatus run(IProgressMonitor monitor) {
            try {
              new HudsonClient().scheduleJob(j.getName());
            } catch (IOException e1) {
              return new Status(Status.ERROR, Activator.PLUGIN_ID, 0, "Unable to schedule job", e1);
            }
           
            try {
              Thread.sleep(2000);
            } catch (InterruptedException e) {
              Thread.currentThread().interrupt();
            }
            Display.getDefault().syncExec(new Runnable() {
              public void run() {
                viewer.refresh();
              }
            });
            return Status.OK_STATUS;
          }

        };
        sj.setPriority(org.eclipse.core.runtime.jobs.Job.INTERACTIVE);
        sj.schedule();
      }
    };
    scheduleAction.setText("Schedule new build");
    scheduleAction.setToolTipText("Schedule new build for project");
    scheduleAction.setImageDescriptor(Activator.getImageDescriptor("icons/schedule.png"));
    scheduleAction.setEnabled(false);
   
    viewer.addSelectionChangedListener(new ISelectionChangedListener() {
      public void selectionChanged(SelectionChangedEvent event) {
        IStructuredSelection sel = (IStructuredSelection) event.getSelection();
        scheduleAction.setEnabled(sel.size() == 1);
      }
    });
   
    refreshAction = new Action() {
      public void run() {
        org.eclipse.core.runtime.jobs.Job refresh = new org.eclipse.core.runtime.jobs.Job("Refreshing Hudson status") {
          protected IStatus run(IProgressMonitor monitor) {
            Display.getDefault().syncExec(new Runnable() {
              public void run() {
                viewer.refresh();
              }
            });
            return Status.OK_STATUS;
          }
        };
        refresh.setPriority(org.eclipse.core.runtime.jobs.Job.INTERACTIVE);
        refresh.schedule();
      }
    };
    refreshAction.setText("Refresh status");
    refreshAction.setToolTipText("Refresh status for all projects");
    refreshAction.setImageDescriptor(Activator.getImageDescriptor("icons/refresh.png"));
  }

  private void hookDoubleClickAction() {
    viewer.addDoubleClickListener(new IDoubleClickListener() {
      public void doubleClick(DoubleClickEvent event) {
        IStructuredSelection sel = (IStructuredSelection) event.getSelection();
        Job j = (Job) sel.getFirstElement();
        IWorkbenchBrowserSupport browserSupport = getSite().getWorkbenchWindow().getWorkbench().getBrowserSupport();
       
        try {
          URL u = new URL(baseUrl + "/job/" + j.getName());
          IWebBrowser browser = browserSupport.createBrowser(IWorkbenchBrowserSupport.AS_EDITOR, Activator.PLUGIN_ID + ".web", "Hudson", "Hudson");
          browser.openURL(u);
         
        } catch (MalformedURLException e) {
          showError("Illegal url for Hudson", e);
        } catch (PartInitException e) {
          showError("Unable to open browser", e);
        }
      }
    });
  }
 
  private void showError(String msg, Exception e) {
    ErrorDialog.openError(getSite().getShell(), "Hudson Error", null, new Status(Status.ERROR, Activator.PLUGIN_ID, Status.OK, msg, e));
  }
 
  /**
   * Passing the focus request to the viewer's control.
   */
  public void setFocus() {
    viewer.getControl().setFocus();
  }
}
TOP

Related Classes of dk.contix.eclipse.hudson.views.HudsonView

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.