Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: 2d507e6403b63058e9dd35af020b9d7aa286b0a9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*******************************************************************************
 * Copyright (c) 2000, 2012 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are 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:
 *     IBM Corporation - initial API and implementation
 *     Les Jones <lesojones@gmail.com> - bug 191365
 *******************************************************************************/
package org.eclipse.pde.internal.ui.views.plugins;

import java.io.File;
import org.eclipse.core.resources.IStorage;
import org.eclipse.core.runtime.jobs.*;
import org.eclipse.jdt.core.*;
import org.eclipse.jdt.ui.StandardJavaElementContentProvider;
import org.eclipse.jface.viewers.*;
import org.eclipse.pde.core.plugin.IPluginModelBase;
import org.eclipse.pde.internal.core.*;
import org.eclipse.pde.internal.ui.elements.DefaultContentProvider;
import org.eclipse.ui.progress.DeferredTreeContentManager;
import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;

public class PluginsContentProvider extends DefaultContentProvider implements ITreeContentProvider, IStructuredContentProvider {

	private PluginsView fView;
	private StandardJavaElementContentProvider fJavaProvider;
	private DeferredTreeContentManager fManager = null;

	/**
	 * Constructor for PluginsContentProvider.
	 */
	public PluginsContentProvider(PluginsView view) {
		fView = view;
		fJavaProvider = new StandardJavaElementContentProvider();
	}

	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
		if (newInput == null) {
			if (fManager != null)
				fManager.cancel(oldInput);
			return;
		}
		fManager = new DeferredTreeContentManager((AbstractTreeViewer) viewer);
		fManager.addUpdateCompleteListener(getCompletionJobListener());
		fView.updateTitle(newInput);
	}

	/*
	 * (non-Javadoc)
	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
	 */
	public Object[] getChildren(Object parentElement) {
		if (parentElement instanceof IDeferredWorkbenchAdapter) {
			if (PDECore.getDefault().getModelManager().isInitialized())
				return PDECore.getDefault().getModelManager().getAllModels();
			Object[] children = fManager.getChildren(parentElement);
			return children;
		}
		if (parentElement instanceof IPluginModelBase) {
			IPluginModelBase model = (IPluginModelBase) parentElement;
			File file = new File(model.getInstallLocation());
			if (!file.isFile()) {
				FileAdapter adapter = new ModelFileAdapter(model, file, PDECore.getDefault().getSearchablePluginsManager());
				return adapter.getChildren();
			}
		}

		if (parentElement instanceof FileAdapter) {
			return ((FileAdapter) parentElement).getChildren();
		}

		if (parentElement instanceof IPackageFragmentRoot || parentElement instanceof IPackageFragment || parentElement instanceof ICompilationUnit || parentElement instanceof IStorage)
			return fJavaProvider.getChildren(parentElement);

		return new Object[0];
	}

	/*
	 * (non-Javadoc)
	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
	 */
	public Object getParent(Object element) {
		if (element instanceof PluginModelManager) {
			return null;
		}
		if (element instanceof IPluginModelBase) {
			return PDECore.getDefault().getModelManager();
		}
		if (element instanceof ModelFileAdapter) {
			return ((ModelFileAdapter) element).getModel();
		}
		if (element instanceof FileAdapter) {
			return ((FileAdapter) element).getParent();
		}
		if (element instanceof IJarEntryResource) {
			return ((IJarEntryResource) element).getParent();
		}
		return null;
	}

	/*
	 * (non-Javadoc)
	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
	 */
	public boolean hasChildren(Object element) {
		if (element instanceof IDeferredWorkbenchAdapter)
			return fManager.mayHaveChildren(element);
		if (element instanceof IPluginModelBase) {
			IPluginModelBase model = (IPluginModelBase) element;
			return model.getUnderlyingResource() == null && !new File(model.getInstallLocation()).isFile();
		}
		if (element instanceof FileAdapter) {
			FileAdapter fileAdapter = (FileAdapter) element;
			return fileAdapter.hasChildren();
		}
		if (element instanceof IPackageFragmentRoot || element instanceof IPackageFragment || element instanceof ICompilationUnit || element instanceof IStorage)
			return fJavaProvider.hasChildren(element);
		return false;
	}

	/**
	 * @see IStructuredContentProvider#getElements(Object)
	 */
	public Object[] getElements(Object inputElement) {
		return getChildren(inputElement);
	}

	protected IJobChangeListener getCompletionJobListener() {
		return new JobChangeAdapter() {

			public void done(IJobChangeEvent event) {
				if (event.getResult().isOK())
					fView.updateContentDescription();
			}

		};
	}

}

Back to the top