use of org.eclipse.jface.viewers.SelectionChangedEvent in project bndtools by bndtools.
the class LocalRepositorySelectionPage method createControl.
public void createControl(Composite parent) {
setTitle("Select Local Repository");
setMessage("Bundle will be imported into the selected repository.");
Table table = new Table(parent, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION);
final TableViewer viewer = new TableViewer(table);
viewer.setContentProvider(new RepositoryTreeContentProvider());
viewer.setLabelProvider(new RepositoryTreeLabelProvider(false));
viewer.setFilters(new ViewerFilter[] { new ViewerFilter() {
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
return (element instanceof RepositoryPlugin) && ((RepositoryPlugin) element).canWrite();
}
} });
try {
Workspace workspace = Central.getWorkspace();
viewer.setInput(workspace);
if (selectedRepository != null)
viewer.setSelection(new StructuredSelection(selectedRepository));
validate(workspace);
} catch (Exception e) {
logger.logError("Error querying local repositories", e);
setErrorMessage("Error querying local repositories, see log for details.");
}
// LISTENERS
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
setSelectedRepository((RepositoryPlugin) selection.getFirstElement());
}
});
viewer.addOpenListener(new IOpenListener() {
public void open(OpenEvent evt) {
IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
setSelectedRepository((RepositoryPlugin) selection.getFirstElement());
IWizardPage nextPage = getNextPage();
if (nextPage != null)
getContainer().showPage(nextPage);
}
});
setControl(table);
}
use of org.eclipse.jface.viewers.SelectionChangedEvent in project bndtools by bndtools.
the class WorkspacePreviewPage method createControl.
@Override
public void createControl(Composite parent) {
setTitle("Preview Changes");
//$NON-NLS-1$
setImageDescriptor(Plugin.imageDescriptorFromPlugin("icons/bndtools-wizban.png"));
imgAdded = AbstractUIPlugin.imageDescriptorFromPlugin(Plugin.PLUGIN_ID, "icons/incoming.gif").createImage(parent.getDisplay());
imgOverwrite = AbstractUIPlugin.imageDescriptorFromPlugin(Plugin.PLUGIN_ID, "icons/conflict.gif").createImage(parent.getDisplay());
imgError = AbstractUIPlugin.imageDescriptorFromPlugin(Plugin.PLUGIN_ID, "icons/error_obj.gif").createImage(parent.getDisplay());
int columns = 4;
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(columns, false);
composite.setLayout(layout);
setControl(composite);
Label lblTitle = new Label(composite, SWT.NONE);
lblTitle.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, columns, 1));
// Table
tblOutputs = new Table(composite, SWT.BORDER | SWT.CHECK);
tblOutputs.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, columns, 1));
vwrOutputs = new CheckboxTableViewer(tblOutputs);
vwrOutputs.setContentProvider(ArrayContentProvider.getInstance());
vwrOutputs.setLabelProvider(new StyledCellLabelProvider() {
@Override
public void update(ViewerCell cell) {
StyledString label;
Image icon;
String path = (String) cell.getElement();
String error = resourceErrors.get(path);
if (error != null) {
label = new StyledString(path, ItalicStyler.INSTANCE_ERROR);
icon = imgError;
} else {
label = new StyledString(path);
icon = existingFiles.contains(path) ? imgOverwrite : imgAdded;
}
cell.setText(path);
cell.setStyleRanges(label.getStyleRanges());
cell.setImage(icon);
}
});
vwrOutputs.setSorter(new ViewerSorter(Collator.getInstance()));
// Details display
final Label lblDetails = new Label(composite, SWT.NONE);
lblDetails.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, columns, 1));
lblDetails.setText(MSG_NOTHING_SELECTED);
// Button Panel
Label spacer1 = new Label(composite, SWT.NONE);
spacer1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
Button btnSelectNonConflict = new Button(composite, SWT.PUSH);
btnSelectNonConflict.setText("Select Non-Conflicting");
btnSelectNonConflict.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
modifyLock.modifyOperation(new Runnable() {
@Override
public void run() {
checkedPaths.clear();
for (Entry<String, Resource> entry : templateOutputs.entries()) {
String path = entry.getKey();
if (!existingFiles.contains(path))
checkedPaths.add(path);
}
vwrOutputs.setCheckedElements(checkedPaths.toArray());
}
});
}
});
Button btnSelectAll = new Button(composite, SWT.PUSH);
btnSelectAll.setText("Select All");
btnSelectAll.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
vwrOutputs.setAllChecked(true);
}
});
Button btnSelectNone = new Button(composite, SWT.PUSH);
btnSelectNone.setText("Select None");
btnSelectNone.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
vwrOutputs.setAllChecked(false);
}
});
// Listeners
vwrOutputs.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection sel = (IStructuredSelection) vwrOutputs.getSelection();
if (sel.isEmpty()) {
lblDetails.setText(MSG_NOTHING_SELECTED);
} else {
String path = (String) sel.getFirstElement();
String resourceError = resourceErrors.get(path);
if (resourceError != null) {
lblDetails.setText(resourceError);
} else if (existingFiles.contains(path)) {
lblDetails.setText("This file already exists and will be overwritten");
} else {
lblDetails.setText("This file will be created");
}
}
}
});
vwrOutputs.addCheckStateListener(new ICheckStateListener() {
@Override
public void checkStateChanged(final CheckStateChangedEvent event) {
modifyLock.ifNotModifying(new Runnable() {
@Override
public void run() {
final String updatedPath = (String) event.getElement();
if (event.getChecked()) {
checkedPaths.add(updatedPath);
// Check any directories that are parents of this path
modifyLock.modifyOperation(new Runnable() {
@Override
public void run() {
for (Entry<String, Resource> entry : templateOutputs.entries()) {
String path = entry.getKey();
if (path.endsWith("/") && updatedPath.startsWith(path)) {
checkedPaths.add(path);
vwrOutputs.setChecked(path, true);
}
}
}
});
} else {
checkedPaths.remove(updatedPath);
// Uncheck any paths that are descendants of this path
if (updatedPath.endsWith("/")) {
modifyLock.modifyOperation(new Runnable() {
@Override
public void run() {
for (Entry<String, Resource> entry : templateOutputs.entries()) {
String path = entry.getKey();
if (path.startsWith(updatedPath)) {
checkedPaths.remove(path);
vwrOutputs.setChecked(path, false);
}
}
}
});
}
}
}
});
}
});
}
use of org.eclipse.jface.viewers.SelectionChangedEvent in project bndtools by bndtools.
the class MapValuesContentProvider method createAvailableBundlesPanel.
Control createAvailableBundlesPanel(Composite parent) {
Composite panel = new Composite(parent, SWT.NONE);
new Label(panel, SWT.NONE).setText("Available Bundles:");
selectionSearchTxt = new Text(panel, SWT.BORDER | SWT.SEARCH | SWT.ICON_SEARCH | SWT.ICON_CANCEL);
selectionSearchTxt.setMessage("filter bundle name");
final Tree availableTree = new Tree(panel, SWT.FULL_SELECTION | SWT.MULTI | SWT.BORDER);
availableViewer = new TreeViewer(availableTree);
availableViewer.setLabelProvider(new RepositoryTreeLabelProvider(false));
availableViewer.setContentProvider(new RepositoryTreeContentProvider());
availableViewer.setAutoExpandLevel(2);
availableViewer.setFilters(new ViewerFilter[] { alreadySelectedFilter });
// Load data
try {
refreshBundleList();
} catch (Exception e) {
setErrorMessage("Error querying repositories: " + e.getMessage());
logger.logError("Error querying repository configuration.", e);
}
// Listeners
selectionSearchTxt.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.keyCode == SWT.ARROW_DOWN)
availableTree.setFocus();
}
});
selectionSearchTxt.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
availableViewer.setFilters(new ViewerFilter[] { alreadySelectedFilter });
}
});
availableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
// Enable add button when a bundle or bundle version is selected on
// the left
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection sel = (IStructuredSelection) availableViewer.getSelection();
for (Iterator<?> iter = sel.iterator(); iter.hasNext(); ) {
Object element = iter.next();
if (element instanceof RepositoryBundle || element instanceof RepositoryBundleVersion || element instanceof ProjectBundle) {
addButton.setEnabled(true);
return;
}
}
addButton.setEnabled(false);
}
});
availableViewer.addOpenListener(new IOpenListener() {
@Override
public void open(OpenEvent event) {
doAdd();
}
});
GridLayout layout;
GridData gd;
layout = new GridLayout(1, false);
panel.setLayout(layout);
gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
selectionSearchTxt.setLayoutData(gd);
gd = new GridData(SWT.FILL, SWT.FILL, true, true);
gd.heightHint = 300;
gd.widthHint = 250;
availableTree.setLayoutData(gd);
return panel;
}
use of org.eclipse.jface.viewers.SelectionChangedEvent in project bndtools by bndtools.
the class RepositoriesView method createActions.
void createActions() {
collapseAllAction = new Action() {
@Override
public void run() {
viewer.collapseAll();
}
};
collapseAllAction.setEnabled(false);
collapseAllAction.setText("Collapse All");
collapseAllAction.setToolTipText("Collapse All");
collapseAllAction.setImageDescriptor(Icons.desc("collapse"));
collapseAllAction.setDisabledImageDescriptor(Icons.desc("collapse.disabled"));
refreshAction = new Action() {
@Override
public void run() {
new WorkspaceJob("Refresh repositories") {
@Override
public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
if (monitor == null)
monitor = new NullProgressMonitor();
monitor.subTask("Refresh all repositories");
try {
refreshAction.setEnabled(false);
Central.refreshPlugins();
} catch (Exception e) {
return new Status(Status.ERROR, Plugin.PLUGIN_ID, "Failed to refresh plugins", e);
} finally {
refreshAction.setEnabled(true);
}
return Status.OK_STATUS;
}
}.schedule();
}
};
refreshAction.setEnabled(false);
refreshAction.setText("Refresh");
refreshAction.setToolTipText("Refresh Repositories Tree");
refreshAction.setImageDescriptor(Icons.desc("refresh"));
refreshAction.setDisabledImageDescriptor(Icons.desc("refresh.disabled"));
addBundlesAction = new Action() {
@Override
public void run() {
IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
Object element = selection.getFirstElement();
if (element != null && element instanceof RepositoryPlugin) {
RepositoryPlugin repo = (RepositoryPlugin) element;
if (repo.canWrite()) {
AddFilesToRepositoryWizard wizard = new AddFilesToRepositoryWizard(repo, new File[0]);
WizardDialog dialog = new WizardDialog(getViewSite().getShell(), wizard);
dialog.open();
viewer.refresh(repo);
}
}
}
};
addBundlesAction.setEnabled(false);
addBundlesAction.setText("Add");
addBundlesAction.setToolTipText("Add Bundles to Repository");
addBundlesAction.setImageDescriptor(Icons.desc("add"));
addBundlesAction.setDisabledImageDescriptor(Icons.desc("add.disabled"));
advancedSearchAction = new Action("Advanced Search", Action.AS_CHECK_BOX) {
@Override
public void run() {
if (advancedSearchAction.isChecked()) {
AdvancedSearchDialog dialog = new AdvancedSearchDialog(getSite().getShell());
if (advancedSearchState != null) {
try {
XMLMemento memento = XMLMemento.createReadRoot(new StringReader(advancedSearchState));
dialog.restoreState(memento);
} catch (Exception e) {
logger.logError("Failed to load dialog state", e);
}
}
if (Window.OK == dialog.open()) {
Requirement req = dialog.getRequirement();
contentProvider.setRequirementFilter(req);
SWTUtil.recurseEnable(false, filterPanel);
viewer.refresh();
viewer.expandToLevel(2);
} else {
advancedSearchAction.setChecked(false);
}
try {
XMLMemento memento = XMLMemento.createWriteRoot("search");
dialog.saveState(memento);
StringWriter writer = new StringWriter();
memento.save(writer);
advancedSearchState = writer.toString();
} catch (Exception e) {
logger.logError("Failed to save dialog state", e);
}
} else {
contentProvider.setRequirementFilter(null);
SWTUtil.recurseEnable(true, filterPanel);
viewer.refresh();
}
}
};
advancedSearchAction.setEnabled(false);
advancedSearchAction.setText("Advanced Search");
advancedSearchAction.setToolTipText("Toggle Advanced Search");
advancedSearchAction.setImageDescriptor(Icons.desc("search"));
advancedSearchAction.setDisabledImageDescriptor(Icons.desc("search.disabled"));
downloadAction = new Action() {
@Override
public void run() {
IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
// The set of Repos included in the selection; they will be completely downloaded.
Set<RemoteRepositoryPlugin> repos = new IdentityHashSet<>(selectionByType(selection, RemoteRepositoryPlugin.class));
// The set of Bundles included in the selection.
Set<RepositoryBundle> bundles = new IdentityHashSet<RepositoryBundle>();
for (RepositoryBundle bundle : selectionByType(selection, RepositoryBundle.class)) {
// filter out bundles that come from already-selected repos.
if (!repos.contains(bundle.getRepo()))
bundles.add(bundle);
}
// The set of Bundle Versions included in the selection
Set<RepositoryBundleVersion> bundleVersions = new IdentityHashSet<RepositoryBundleVersion>();
for (RepositoryBundleVersion bundleVersion : selectionByType(selection, RepositoryBundleVersion.class)) {
// filter out bundles that come from already-selected repos.
if (!repos.contains(bundleVersion.getRepo()))
bundleVersions.add(bundleVersion);
}
RepoDownloadJob downloadJob = new RepoDownloadJob(repos, bundles, bundleVersions);
downloadJob.schedule();
}
private <T> List<T> selectionByType(IStructuredSelection selection, Class<T> type) {
List<T> result = new ArrayList<T>(selection.size());
@SuppressWarnings("unchecked") Iterator<Object> iterator = selection.iterator();
while (iterator.hasNext()) {
Object item = iterator.next();
if (type.isInstance(item)) {
@SuppressWarnings("unchecked") T cast = (T) item;
result.add(cast);
}
}
return result;
}
};
downloadAction.setEnabled(false);
downloadAction.setText("Download Repository Content");
downloadAction.setImageDescriptor(Icons.desc("download"));
downloadAction.setDisabledImageDescriptor(Icons.desc("download.disabled"));
offlineAction = new Action("Online/Offline Mode", Action.AS_CHECK_BOX) {
@Override
public void run() {
Workspace workspace = Central.getWorkspaceIfPresent();
if (workspace != null) {
prefs.setWorkspaceOffline(offlineAction.isChecked());
}
}
};
offlineAction.setEnabled(false);
offlineAction.setToolTipText("Go Offline");
offlineAction.setImageDescriptor(Icons.desc("connected"));
offlineAction.setDisabledImageDescriptor(Icons.desc("connected.disabled"));
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
boolean enable = false;
@SuppressWarnings("unchecked") List<Object> list = selection.toList();
for (Object item : list) {
if (item instanceof RemoteRepositoryPlugin) {
enable = true;
break;
} else if (item instanceof RepositoryEntry) {
if (!((RepositoryEntry) item).isLocal()) {
enable = true;
break;
}
}
}
downloadAction.setEnabled(enable);
}
});
}
use of org.eclipse.jface.viewers.SelectionChangedEvent in project bndtools by bndtools.
the class RepositoriesView method createPartControl.
@Override
public void createPartControl(final Composite parent) {
// CREATE CONTROLS
final StackLayout stackLayout = new StackLayout();
parent.setLayout(stackLayout);
FormToolkit toolkit = new FormToolkit(parent.getDisplay());
Composite defaultParent = toolkit.createComposite(parent, SWT.NONE);
FillLayout fill = new FillLayout();
fill.marginHeight = 5;
fill.marginWidth = 5;
defaultParent.setLayout(fill);
if (!Central.hasWorkspaceDirectory()) {
FormText form = toolkit.createFormText(defaultParent, true);
form.setText("<form><p>No workspace configuration found. <a>Create a new Bnd workspace...</a></p></form>", true, false);
form.addHyperlinkListener(new HyperlinkAdapter() {
@Override
public void linkActivated(HyperlinkEvent e) {
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
WorkspaceSetupWizard wizard = new WorkspaceSetupWizard();
wizard.init(workbench, StructuredSelection.EMPTY);
WizardDialog dialog = new WizardDialog(window.getShell(), wizard);
dialog.open();
}
});
} else {
toolkit.createLabel(defaultParent, "Repositories are loading, please wait...");
}
stackLayout.topControl = defaultParent;
parent.layout();
final Composite mainPanel = new Composite(parent, SWT.NONE);
filterPanel = filterPart.createControl(mainPanel, 5, 5);
Tree tree = new Tree(mainPanel, SWT.FULL_SELECTION | SWT.MULTI);
filterPanel.setBackground(tree.getBackground());
viewer = new TreeViewer(tree);
contentProvider = new SearchableRepositoryTreeContentProvider() {
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
super.inputChanged(viewer, oldInput, newInput);
if (newInput != null) {
stackLayout.topControl = mainPanel;
advancedSearchAction.setEnabled(true);
refreshAction.setEnabled(true);
collapseAllAction.setEnabled(true);
configureOfflineAction();
parent.layout();
}
}
};
viewer.setContentProvider(contentProvider);
ColumnViewerToolTipSupport.enableFor(viewer);
viewer.setLabelProvider(new RepositoryTreeLabelProvider(false));
getViewSite().setSelectionProvider(viewer);
Central.addRepositoriesViewer(viewer, RepositoriesView.this);
JpmPreferences jpmPrefs = new JpmPreferences();
final boolean showJpmOnClick = jpmPrefs.getBrowserSelection() != JpmPreferences.PREF_BROWSER_EXTERNAL;
// LISTENERS
filterPart.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
String filter = (String) event.getNewValue();
updatedFilter(filter);
}
});
ViewerDropAdapter dropAdapter = new ViewerDropAdapter(viewer) {
@Override
public boolean validateDrop(Object target, int operation, TransferData transferType) {
if (target == null)
return false;
if (canDrop(target, transferType))
return true;
boolean valid = false;
if (target instanceof RepositoryPlugin) {
if (((RepositoryPlugin) target).canWrite()) {
if (URLTransfer.getInstance().isSupportedType(transferType))
return true;
if (LocalSelectionTransfer.getTransfer().isSupportedType(transferType)) {
ISelection selection = LocalSelectionTransfer.getTransfer().getSelection();
if (selection instanceof IStructuredSelection) {
for (Iterator<?> iter = ((IStructuredSelection) selection).iterator(); iter.hasNext(); ) {
Object element = iter.next();
if (element instanceof RepositoryBundle || element instanceof RepositoryBundleVersion) {
valid = true;
break;
}
if (element instanceof IFile) {
valid = true;
break;
}
if (element instanceof IAdaptable) {
IFile file = (IFile) ((IAdaptable) element).getAdapter(IFile.class);
if (file != null) {
valid = true;
break;
}
}
}
}
} else {
valid = true;
}
}
}
return valid;
}
@Override
public void dragEnter(DropTargetEvent event) {
super.dragEnter(event);
event.detail = DND.DROP_COPY;
}
@Override
public boolean performDrop(Object data) {
if (RepositoriesView.this.performDrop(getCurrentTarget(), getCurrentEvent().currentDataType, data)) {
viewer.refresh(getCurrentTarget(), true);
return true;
}
boolean copied = false;
if (URLTransfer.getInstance().isSupportedType(getCurrentEvent().currentDataType)) {
try {
URL url = new URL((String) URLTransfer.getInstance().nativeToJava(getCurrentEvent().currentDataType));
if (!url.getPath().endsWith(".jar")) {
String uris = url.toString();
if (uris.contains("#!/p/sha/")) {
MessageDialog.openWarning(null, "Dropped URL is a JPM Revision Identifier, not a JAR", "The dropped URL is a JPM identifier, can only be dropped on a JPM repository. You can also select the revision on JPM and drag the 'jar' link of the revision to any of the other repositories.");
return false;
}
}
File tmp = File.createTempFile("dwnl", ".jar");
try (HttpClient client = new HttpClient()) {
IO.copy(client.connect(url), tmp);
}
if (isJarFile(tmp)) {
copied = addFilesToRepository((RepositoryPlugin) getCurrentTarget(), new File[] { tmp });
} else {
tmp.delete();
MessageDialog.openWarning(null, "Unrecognized Artifact", "The dropped URL is not recognized as a remote JAR file: " + url.toString());
}
} catch (Exception e) {
return false;
}
} else if (data instanceof String[]) {
String[] paths = (String[]) data;
File[] files = new File[paths.length];
for (int i = 0; i < paths.length; i++) {
files[i] = new File(paths[i]);
}
copied = addFilesToRepository((RepositoryPlugin) getCurrentTarget(), files);
} else if (data instanceof IResource[]) {
IResource[] resources = (IResource[]) data;
File[] files = new File[resources.length];
for (int i = 0; i < resources.length; i++) {
files[i] = resources[i].getLocation().toFile();
}
copied = addFilesToRepository((RepositoryPlugin) getCurrentTarget(), files);
} else if (data instanceof IStructuredSelection) {
File[] files = convertSelectionToFiles((IStructuredSelection) data);
if (files != null && files.length > 0)
copied = addFilesToRepository((RepositoryPlugin) getCurrentTarget(), files);
}
return copied;
}
};
dropAdapter.setFeedbackEnabled(false);
dropAdapter.setExpandEnabled(false);
viewer.addDropSupport(DND.DROP_COPY | DND.DROP_MOVE, new Transfer[] { URLTransfer.getInstance(), FileTransfer.getInstance(), ResourceTransfer.getInstance(), LocalSelectionTransfer.getTransfer() }, dropAdapter);
viewer.addDragSupport(DND.DROP_COPY | DND.DROP_MOVE, new Transfer[] { LocalSelectionTransfer.getTransfer() }, new SelectionDragAdapter(viewer));
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
boolean writableRepoSelected = false;
IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
Object element = selection.getFirstElement();
if (element instanceof RepositoryPlugin) {
RepositoryPlugin repo = (RepositoryPlugin) element;
writableRepoSelected = repo.canWrite();
}
addBundlesAction.setEnabled(writableRepoSelected);
}
});
tree.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent ev) {
Object element = ((IStructuredSelection) viewer.getSelection()).getFirstElement();
if (element instanceof ContinueSearchElement) {
try {
getViewSite().getPage().showView(Plugin.JPM_BROWSER_VIEW_ID, null, showJpmOnClick ? IWorkbenchPage.VIEW_ACTIVATE : IWorkbenchPage.VIEW_CREATE);
} catch (PartInitException e) {
Plugin.getDefault().getLog().log(e.getStatus());
}
}
}
});
viewer.addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
if (!event.getSelection().isEmpty()) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
final Object element = selection.getFirstElement();
if (element instanceof IAdaptable) {
final URI uri = (URI) ((IAdaptable) element).getAdapter(URI.class);
if (uri == null && element instanceof RepositoryEntry) {
boolean download = MessageDialog.openQuestion(getSite().getShell(), "Repositories", "This repository entry is unable to be opened because it has not been downloaded. Download and open it now?");
if (download) {
final RepositoryEntry entry = (RepositoryEntry) element;
Job downloadJob = new Job("Downloading repository entry " + entry.getBsn()) {
@Override
protected IStatus run(IProgressMonitor monitor) {
final File repoFile = entry.getFile(true);
if (repoFile != null && repoFile.exists()) {
getSite().getShell().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
openURI(repoFile.toURI());
}
});
}
return Status.OK_STATUS;
}
};
downloadJob.setUser(true);
downloadJob.schedule();
}
} else if (uri != null) {
openURI(uri);
}
} else if (element instanceof ContinueSearchElement) {
ContinueSearchElement searchElement = (ContinueSearchElement) element;
try {
JpmPreferences jpmPrefs = new JpmPreferences();
if (jpmPrefs.getBrowserSelection() == JpmPreferences.PREF_BROWSER_EXTERNAL) {
URI browseUrl = searchElement.browse();
getViewSite().getWorkbenchWindow().getWorkbench().getBrowserSupport().getExternalBrowser().openURL(browseUrl.toURL());
} else
getViewSite().getPage().showView(Plugin.JPM_BROWSER_VIEW_ID, null, IWorkbenchPage.VIEW_VISIBLE);
} catch (PartInitException e) {
Plugin.getDefault().getLog().log(e.getStatus());
} catch (Exception e) {
Plugin.getDefault().getLog().log(new Status(IStatus.ERROR, Plugin.PLUGIN_ID, 0, "Failed to load repository browser view", e));
}
} else if (element instanceof RepositoryPlugin) {
viewer.setExpandedState(element, !viewer.getExpandedState(element));
}
}
}
});
createContextMenu();
// LAYOUT
GridLayout layout = new GridLayout(1, false);
layout.horizontalSpacing = 0;
layout.verticalSpacing = 0;
layout.marginWidth = 0;
layout.marginHeight = 0;
mainPanel.setLayout(layout);
tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
filterPanel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
// Toolbar
createActions();
fillToolBar(getViewSite().getActionBars().getToolBarManager());
prefs.addPropertyChangeListener(workspaceOfflineListener);
// synthenic call to "refresh" so that we can get the repositories to show up in the UI
new WorkspaceJob("Load repositories") {
@Override
public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
try {
Central.refreshPlugins();
} catch (Exception e) {
// ignore errors there may be no workspace yet
}
return Status.OK_STATUS;
}
}.schedule();
IActionBars actionBars = getViewSite().getActionBars();
actionBars.setGlobalActionHandler(ActionFactory.REFRESH.getId(), refreshAction);
}
Aggregations