1 /*******************************************************************************
2  *  Copyright (c) 2007, 2017 IBM Corporation and others.
3  *
4  *  This program and the accompanying materials
5  *  are made available under the terms of the Eclipse Public License 2.0
6  *  which accompanies this distribution, and is available at
7  *  https://www.eclipse.org/legal/epl-2.0/
8  *
9  *  SPDX-License-Identifier: EPL-2.0
10  *
11  *  Contributors:
12  *     IBM Corporation - initial API and implementation
13  *     Genuitec, LLC - added license support
14  *******************************************************************************/
15 package org.eclipse.equinox.internal.p2.ui.admin;
16 
17 import java.util.List;
18 import org.eclipse.equinox.internal.p2.ui.ProvUIProvisioningListener;
19 import org.eclipse.equinox.internal.p2.ui.QueryableMetadataRepositoryManager;
20 import org.eclipse.equinox.internal.p2.ui.admin.dialogs.AddMetadataRepositoryDialog;
21 import org.eclipse.equinox.internal.p2.ui.admin.preferences.PreferenceConstants;
22 import org.eclipse.equinox.internal.p2.ui.model.MetadataRepositories;
23 import org.eclipse.equinox.internal.p2.ui.query.IUViewQueryContext;
24 import org.eclipse.equinox.internal.p2.ui.viewers.IUDragAdapter;
25 import org.eclipse.equinox.p2.operations.RepositoryTracker;
26 import org.eclipse.equinox.p2.repository.IRepositoryManager;
27 import org.eclipse.equinox.p2.ui.Policy;
28 import org.eclipse.jface.action.IMenuManager;
29 import org.eclipse.jface.action.Separator;
30 import org.eclipse.jface.viewers.TreeViewer;
31 import org.eclipse.swt.dnd.*;
32 import org.eclipse.swt.widgets.Shell;
33 import org.eclipse.ui.part.PluginTransfer;
34 
35 /**
36  * This view allows users to interact with metadata repositories
37  *
38  * @since 3.4
39  */
40 public class MetadataRepositoriesView extends RepositoriesView {
41 
42 	private InstallAction installAction;
43 	private RepositoryTracker tracker;
44 	MetadataRepositories input;
45 
46 	/**
47 	 * The constructor.
48 	 */
MetadataRepositoriesView()49 	public MetadataRepositoriesView() {
50 		// constructor
51 	}
52 
53 	@Override
getInput()54 	protected Object getInput() {
55 		if (input == null) {
56 			// view by repo
57 			IUViewQueryContext context = new IUViewQueryContext(IUViewQueryContext.AVAILABLE_VIEW_BY_REPO);
58 			Policy policy = ProvAdminUIActivator.getDefault().getPolicy();
59 			context.setShowLatestVersionsOnly(policy.getShowLatestVersionsOnly());
60 			context.setShowInstallChildren(policy.getShowDrilldownRequirements());
61 			context.setShowProvisioningPlanChildren(policy.getShowDrilldownRequirements());
62 			context.setUseCategories(policy.getGroupByCategory());
63 
64 			input = new MetadataRepositories(context, getProvisioningUI(), new QueryableMetadataRepositoryManager(getProvisioningUI(), false));
65 		}
66 		return input;
67 	}
68 
69 	@Override
getAddCommandLabel()70 	protected String getAddCommandLabel() {
71 		return ProvAdminUIMessages.MetadataRepositoriesView_AddRepositoryLabel;
72 	}
73 
74 	@Override
getAddCommandTooltip()75 	protected String getAddCommandTooltip() {
76 		return ProvAdminUIMessages.MetadataRepositoriesView_AddRepositoryTooltip;
77 	}
78 
79 	@Override
getRemoveCommandTooltip()80 	protected String getRemoveCommandTooltip() {
81 		return ProvAdminUIMessages.MetadataRepositoriesView_RemoveRepositoryTooltip;
82 	}
83 
84 	@Override
openAddRepositoryDialog(Shell shell)85 	protected int openAddRepositoryDialog(Shell shell) {
86 		return new AddMetadataRepositoryDialog(shell, getProvisioningUI()).open();
87 	}
88 
89 	@Override
makeActions()90 	protected void makeActions() {
91 		super.makeActions();
92 		installAction = new InstallAction(getProvisioningUI(), viewer);
93 	}
94 
95 	@Override
fillContextMenu(IMenuManager manager)96 	protected void fillContextMenu(IMenuManager manager) {
97 		if (installAction.isEnabled()) {
98 			manager.add(new Separator());
99 			manager.add(installAction);
100 		}
101 		super.fillContextMenu(manager);
102 	}
103 
104 	@Override
configureViewer(final TreeViewer treeViewer)105 	protected void configureViewer(final TreeViewer treeViewer) {
106 		super.configureViewer(treeViewer);
107 		// Add drag support for IU's
108 		Transfer[] transfers = new Transfer[] {org.eclipse.jface.util.LocalSelectionTransfer.getTransfer(), PluginTransfer.getInstance(), TextTransfer.getInstance(),};
109 		treeViewer.addDragSupport(DND.DROP_COPY, transfers, new IUDragAdapter(treeViewer));
110 	}
111 
getRepoFlags()112 	protected int getRepoFlags() {
113 		if (ProvAdminUIActivator.getDefault().getPreferenceStore().getBoolean(PreferenceConstants.PREF_HIDE_SYSTEM_REPOS))
114 			return IRepositoryManager.REPOSITORIES_NON_SYSTEM;
115 		return IRepositoryManager.REPOSITORIES_ALL;
116 	}
117 
118 	@Override
getListenerEventTypes()119 	protected int getListenerEventTypes() {
120 		return ProvUIProvisioningListener.PROV_EVENT_METADATA_REPOSITORY;
121 	}
122 
123 	@Override
getVisualProperties()124 	protected List<String> getVisualProperties() {
125 		List<String> list = super.getVisualProperties();
126 		list.add(PreferenceConstants.PREF_USE_CATEGORIES);
127 		list.add(PreferenceConstants.PREF_COLLAPSE_IU_VERSIONS);
128 		return list;
129 	}
130 
131 	@Override
updateCachesForPreferences()132 	protected void updateCachesForPreferences() {
133 		// We want to reconstruct the input's query context based on the latest preferences
134 		input = null;
135 	}
136 
137 	@Override
getRepositoryTracker()138 	protected RepositoryTracker getRepositoryTracker() {
139 		if (tracker == null)
140 			tracker = new MetadataRepositoryTracker(getProvisioningUI());
141 		return tracker;
142 	}
143 }
144