Java tutorial
/******************************************************************************* * 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; } }