com.cloudbees.eclipse.dev.ui.views.instances.JenkinsTreeView.java Source code

Java tutorial

Introduction

Here is the source code for com.cloudbees.eclipse.dev.ui.views.instances.JenkinsTreeView.java

Source

/*******************************************************************************
 * Copyright (c) 2013 Cloud Bees, Inc.
 * All rights reserved. 
 * This program is made available under the terms of the 
 * Eclipse Public License v1.0 which accompanies this distribution, 
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Cloud Bees, Inc. - initial API and implementation 
 *******************************************************************************/
package com.cloudbees.eclipse.dev.ui.views.instances;

import java.util.List;

import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IOpenListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.OpenEvent;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

import com.cloudbees.eclipse.core.CBRemoteChangeAdapter;
import com.cloudbees.eclipse.core.CBRemoteChangeListener;
import com.cloudbees.eclipse.core.CloudBeesException;
import com.cloudbees.eclipse.core.jenkins.api.BaseJenkinsResponse;
import com.cloudbees.eclipse.core.jenkins.api.JenkinsInstanceResponse;
import com.cloudbees.eclipse.core.jenkins.api.JenkinsInstanceResponse.View;
import com.cloudbees.eclipse.dev.ui.CloudBeesDevUiPlugin;
import com.cloudbees.eclipse.dev.ui.actions.ConfigureJenkinsInstancesAction;
import com.cloudbees.eclipse.dev.ui.actions.ReloadJenkinsCloudInstancesAction;
import com.cloudbees.eclipse.dev.ui.actions.ReloadJenkinsLocalInstancesAction;
import com.cloudbees.eclipse.ui.CloudBeesUIPlugin;
import com.cloudbees.eclipse.ui.PreferenceConstants;
import com.cloudbees.eclipse.ui.views.CBTreeAction;
import com.cloudbees.eclipse.ui.views.CBTreeContributor;
import com.cloudbees.eclipse.ui.views.ICBTreeProvider;

/**
 * View showing both Jenkins offline installations and JaaS Nectar instances
 * 
 * @author ahtik
 */
public class JenkinsTreeView extends ViewPart implements IPropertyChangeListener, ICBTreeProvider {

    public static final String ID = "acom.cloudbees.eclipse.ui.views.instances.JenkinsTreeView";

    protected InstanceContentProvider contentProvider;
    protected ILabelProvider labelProvider;

    private TreeViewer viewer;
    private CBRemoteChangeListener jenkinsChangeListener;

    private CBTreeAction attachJenkinsAction = new ConfigureJenkinsInstancesAction();
    //  private CBTreeAction reloadForgeAction = new ReloadForgeReposAction();
    private CBTreeAction reloadJenkinsCloudAction = new ReloadJenkinsCloudInstancesAction();
    private CBTreeAction reloadJenkinsLocalAction = new ReloadJenkinsLocalInstancesAction();

    class NameSorter extends ViewerSorter {

        @Override
        public int compare(final Viewer viewer, final Object e1, final Object e2) {
            if (e1 instanceof JenkinsInstanceResponse.View && e2 instanceof JenkinsInstanceResponse.View) {
                JenkinsInstanceResponse.View v1 = (View) e1;
                JenkinsInstanceResponse.View v2 = (View) e2;
                if (v1.name != null && v2.name != null) {
                    return v1.name.compareTo(v2.name);
                }

            }

            return super.compare(viewer, e1, e2);
        }
    }

    public void init() {
        //    boolean forgeEnabled = CloudBeesUIPlugin.getDefault().getPreferenceStore()
        //        .getBoolean(PreferenceConstants.P_ENABLE_FORGE);
        //    this.reloadForgeAction.setEnabled(forgeEnabled);

        contentProvider = new InstanceContentProvider();
        labelProvider = new InstanceLabelProvider();

        this.reloadJenkinsCloudAction.setEnabled(true);

        this.jenkinsChangeListener = new CBRemoteChangeAdapter() {

            public void jenkinsChanged(final List<JenkinsInstanceResponse> instances) {
                PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
                    @Override
                    public void run() {
                        JenkinsTreeView.this.contentProvider.inputChanged(JenkinsTreeView.this.viewer, null,
                                instances);
                    }
                });

            }

            public void jenkinsStatusUpdate(String viewUrl, boolean online) {
                JenkinsTreeView.this.contentProvider.jenkinsStatusUpdate(JenkinsTreeView.this.viewer, viewUrl,
                        online);
            }

            public void activeAccountChanged(String email, String newAccountName) {
                contentProvider.cloudLoadingFinished();
            }

        };

        CloudBeesUIPlugin.getDefault().addCBRemoteChangeListener(this.jenkinsChangeListener);
        CloudBeesUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this);

        CloudBeesUIPlugin.getDefault().reloadAllCloudJenkins(false);
        CloudBeesUIPlugin.getDefault().reloadAllLocalJenkins(false);

    }

    @Override
    public void createPartControl(final Composite parent) {
        this.viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
        this.viewer.setContentProvider(this.contentProvider);
        this.viewer.setLabelProvider(this.labelProvider);
        this.viewer.setSorter(new NameSorter());
        this.viewer.setInput(getViewSite());

        this.viewer.addOpenListener(new IOpenListener() {

            @Override
            public void open(final OpenEvent event) {
                ISelection sel = event.getSelection();
                if (sel instanceof TreeSelection) {
                    Object el = ((TreeSelection) sel).getFirstElement();
                    JenkinsTreeView.this.open(el);
                }
            }
        });

        contributeToActionBars();

        init();
    }

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

    private void fillLocalPullDown(final IMenuManager manager) {
        manager.add(this.attachJenkinsAction);
        manager.add(this.reloadJenkinsLocalAction);
        manager.add(this.reloadJenkinsCloudAction);
    }

    /*  private void makeActions() {
        this.configureAccountAction = new ConfigureCloudBeesAction();
        this.attachJenkinsAction = new ConfigureJenkinsInstancesAction();
        //    this.reloadForgeAction = new ReloadForgeReposAction();
        this.reloadJenkinsAction = new ReloadJenkinsInstancesAction();
        this.configureSshAction = new ConfigureSshKeysAction();
        
        //    boolean forgeEnabled = CloudBeesUIPlugin.getDefault().getPreferenceStore()
        //        .getBoolean(PreferenceConstants.P_ENABLE_FORGE);
        //    this.reloadForgeAction.setEnabled(forgeEnabled);
        
        boolean jaasEnabled = CloudBeesUIPlugin.getDefault().getPreferenceStore()
    .getBoolean(PreferenceConstants.P_ENABLE_JAAS);
        this.reloadJenkinsAction.setEnabled(jaasEnabled);
        
        CloudBeesUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this);
      }*/

    @Override
    public void setFocus() {
        this.viewer.getControl().setFocus();
    }

    @Override
    public void propertyChange(final PropertyChangeEvent event) {
        //    if (PreferenceConstants.P_ENABLE_FORGE.equals(event.getProperty())) {
        //      boolean forgeEnabled = CloudBeesUIPlugin.getDefault().getPreferenceStore()
        //          .getBoolean(PreferenceConstants.P_ENABLE_FORGE);
        //      this.reloadForgeAction.setEnabled(forgeEnabled);
        //    }

        this.reloadJenkinsCloudAction.setEnabled(true);

        if (PreferenceConstants.P_JENKINS_INSTANCES.equals(event.getProperty())
                || PreferenceConstants.P_EMAIL.equals(event.getProperty())
                || PreferenceConstants.P_PASSWORD.equals(event.getProperty())) {
            CloudBeesUIPlugin.getDefault().reloadAllCloudJenkins(false);
        }

        if (PreferenceConstants.P_JENKINS_INSTANCES.equals(event.getProperty())) {
            CloudBeesUIPlugin.getDefault().reloadAllLocalJenkins(false);
        }

    }

    @Override
    public void dispose() {
        CloudBeesUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this);
        CloudBeesUIPlugin.getDefault().removeCBRemoteChangeListener(this.jenkinsChangeListener);
        this.jenkinsChangeListener = null;
        this.contentProvider = null;
        this.labelProvider = null;

        super.dispose();
    }

    @Override
    public CBTreeContributor[] getContributors() {
        return new CBTreeContributor[] { this.attachJenkinsAction, reloadJenkinsLocalAction,
                this.reloadJenkinsCloudAction };
    }

    @Override
    public ITreeContentProvider getContentProvider() {
        return this.contentProvider;
    }

    @Override
    public ILabelProvider getLabelProvider() {
        return this.labelProvider;
    }

    @Override
    public void setViewer(final TreeViewer viewer) {
        this.viewer = viewer;

        init();
    }

    @Override
    public boolean open(final Object el) {
        if (el instanceof BaseJenkinsResponse) {
            BaseJenkinsResponse resp = (BaseJenkinsResponse) el;
            try {
                CloudBeesDevUiPlugin.getDefault().showJobs(resp.viewUrl, true);
            } catch (CloudBeesException e) {
                CloudBeesUIPlugin.getDefault().getLogger().error(e);
            }
            return true;
        } else if (el instanceof JenkinsInstanceResponse.View) {
            try {
                CloudBeesDevUiPlugin.getDefault().showJobs(((JenkinsInstanceResponse.View) el).url, true);
            } catch (CloudBeesException e) {
                CloudBeesUIPlugin.getDefault().getLogger().error(e);
            }
            return true;
        } else if (el instanceof InstanceGroup) {
            boolean exp = JenkinsTreeView.this.viewer.getExpandedState(el);
            if (exp) {
                JenkinsTreeView.this.viewer.collapseToLevel(el, 1);
            } else {
                JenkinsTreeView.this.viewer.expandToLevel(el, 1);
            }
            return true;
        }

        return false;
    }

    public String getId() {
        return ID;
    }

}