Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/SitePage.java')
-rw-r--r--update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/SitePage.java557
1 files changed, 557 insertions, 0 deletions
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/SitePage.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/SitePage.java
new file mode 100644
index 000000000..bfba7e444
--- /dev/null
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/wizards/SitePage.java
@@ -0,0 +1,557 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 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
+ *******************************************************************************/
+package org.eclipse.update.internal.ui.wizards;
+
+import java.net.URL;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.HyperlinkSettings;
+import org.eclipse.ui.forms.widgets.ScrolledFormText;
+import org.eclipse.update.internal.core.UpdateCore;
+import org.eclipse.update.internal.core.UpdateManagerUtils;
+import org.eclipse.update.internal.ui.UpdateUI;
+import org.eclipse.update.internal.ui.UpdateUIImages;
+import org.eclipse.update.internal.ui.UpdateUIMessages;
+import org.eclipse.update.internal.ui.model.DiscoveryFolder;
+import org.eclipse.update.internal.ui.model.SiteBookmark;
+import org.eclipse.update.internal.ui.model.SiteCategory;
+import org.eclipse.update.internal.ui.model.UpdateModel;
+import org.eclipse.update.internal.ui.parts.SWTUtil;
+import org.eclipse.update.operations.IUpdateModelChangedListener;
+import org.eclipse.update.search.EnvironmentFilter;
+import org.eclipse.update.search.UpdateSearchRequest;
+import org.eclipse.update.search.UpdateSearchScope;
+
+public class SitePage extends BannerPage implements ISearchProvider {
+
+ class SitesLabelProvider extends LabelProvider {
+
+ public Image getImage(Object obj) {
+ if (obj instanceof SiteBookmark)
+ return UpdateUI.getDefault().getLabelProvider().get(
+ UpdateUIImages.DESC_SITE_OBJ);
+ return super.getImage(obj);
+ }
+
+ public String getText(Object obj) {
+ if (obj instanceof SiteBookmark) {
+ return ((SiteBookmark) obj).getLabel();
+ }
+ return super.getText(obj);
+ }
+ }
+
+ class ModelListener implements IUpdateModelChangedListener {
+ public void objectChanged(Object object, String property) {
+ viewer.refresh();
+ checkItems();
+ }
+
+ public void objectsAdded(Object parent, Object[] children) {
+ viewer.refresh();
+ checkItems();
+ }
+
+ public void objectsRemoved(Object parent, Object[] children) {
+ viewer.refresh();
+ checkItems();
+ }
+ }
+
+ private static DiscoveryFolder discoveryFolder = new DiscoveryFolder();
+ private CheckboxTableViewer viewer;
+ private ScrolledFormText descLabel;
+ private Button addSiteButton;
+ private Button addLocalButton;
+ private Button addLocalZippedButton;
+ private Button editButton;
+ private Button removeButton;
+ private Button exportButton;
+ private Button importButton;
+ private Button envFilterCheck;
+ private Button automaticallySelectMirrorsCheckbox;
+ private EnvironmentFilter envFilter;
+ private UpdateSearchRequest searchRequest;
+ private ModelListener modelListener;
+
+ private boolean automaticallySelectMirrors = true;
+
+ public SitePage(UpdateSearchRequest searchRequest) {
+ super("SitePage"); //$NON-NLS-1$
+ this.searchRequest = searchRequest;
+ setTitle(UpdateUIMessages.SitePage_title);
+ setDescription(UpdateUIMessages.SitePage_desc);
+ UpdateUI.getDefault().getLabelProvider().connect(this);
+ envFilter = new EnvironmentFilter();
+
+ modelListener = new ModelListener();
+ UpdateUI.getDefault().getUpdateModel().addUpdateModelChangedListener(
+ modelListener);
+ }
+
+ private void toggleEnvFilter(boolean add) {
+ if (add)
+ searchRequest.addFilter(envFilter);
+ else
+ searchRequest.removeFilter(envFilter);
+ }
+
+ public void dispose() {
+ UpdateUI.getDefault().getLabelProvider().disconnect(this);
+ UpdateUI
+ .getDefault()
+ .getUpdateModel()
+ .removeUpdateModelChangedListener(
+ modelListener);
+ super.dispose();
+ }
+
+ /*
+ * (non-Javadoc) @see
+ * org.eclipse.update.internal.ui.wizards.BannerPage#createContents(org.eclipse.swt.widgets.Composite)
+ */
+ protected Control createContents(Composite parent) {
+ Composite client = new Composite(parent, SWT.NULL);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ client.setLayout(layout);
+
+ Label label = new Label(client, SWT.NULL);
+ label.setText(UpdateUIMessages.SitePage_label);
+ GridData gd = new GridData();
+ gd.horizontalSpan = 2;
+ label.setLayoutData(gd);
+
+ createViewer(client);
+
+ Composite buttonContainer = new Composite(client, SWT.NULL);
+ buttonContainer.setLayoutData(new GridData(GridData.FILL_VERTICAL));
+ layout = new GridLayout();
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ buttonContainer.setLayout(layout);
+
+ addSiteButton = new Button(buttonContainer, SWT.PUSH);
+ addSiteButton.setText(UpdateUIMessages.SitePage_addUpdateSite);
+ addSiteButton.setLayoutData(
+ new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+ SWTUtil.setButtonDimensionHint(addSiteButton);
+ addSiteButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ handleAddSite();
+ }
+ });
+
+ addLocalButton = new Button(buttonContainer, SWT.PUSH);
+ addLocalButton.setText(UpdateUIMessages.SitePage_addLocalSite);
+ addLocalButton.setLayoutData(
+ new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+ SWTUtil.setButtonDimensionHint(addLocalButton);
+ addLocalButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ handleAddLocal();
+ }
+ });
+
+ addLocalZippedButton = new Button(buttonContainer, SWT.PUSH);
+ addLocalZippedButton.setText(UpdateUIMessages.SitePage_addLocalZippedSite);
+ addLocalZippedButton.setLayoutData(
+ new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+ SWTUtil.setButtonDimensionHint(addLocalZippedButton);
+ addLocalZippedButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ handleAddLocalZipped();
+ }
+ });
+
+ // separator
+ new Label(buttonContainer, SWT.None);
+
+ editButton = new Button(buttonContainer, SWT.PUSH);
+ editButton.setText(UpdateUIMessages.SitePage_edit);
+ editButton.setEnabled(false);
+ editButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+ SWTUtil.setButtonDimensionHint(editButton);
+ editButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ handleEdit();
+ }
+ });
+
+ removeButton = new Button(buttonContainer, SWT.PUSH);
+ removeButton.setText(UpdateUIMessages.SitePage_remove);
+ removeButton.setEnabled(false);
+ removeButton.setLayoutData(
+ new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+ SWTUtil.setButtonDimensionHint(removeButton);
+ removeButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ handleRemove();
+ }
+ });
+
+ // separator
+ new Label(buttonContainer, SWT.None);
+
+ importButton = new Button(buttonContainer, SWT.PUSH);
+ importButton.setText(UpdateUIMessages.SitePage_import);
+ importButton.setLayoutData(
+ new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+ SWTUtil.setButtonDimensionHint(importButton);
+ importButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ handleImport();
+ }
+ });
+
+ exportButton = new Button(buttonContainer, SWT.PUSH);
+ exportButton.setText(UpdateUIMessages.SitePage_export);
+ exportButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+ SWTUtil.setButtonDimensionHint(exportButton);
+ exportButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ handleExport();
+ }
+ });
+
+ descLabel = new ScrolledFormText(client, true);
+ descLabel.setText(""); //$NON-NLS-1$
+ descLabel.setBackground(parent.getBackground());
+ HyperlinkSettings settings = new HyperlinkSettings(parent.getDisplay());
+ descLabel.getFormText().setHyperlinkSettings(settings);
+
+ gd = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gd.horizontalSpan = 1;
+ gd.heightHint = 30;
+ descLabel.setLayoutData(gd);
+
+ envFilterCheck = new Button(client, SWT.CHECK);
+ envFilterCheck.setText(UpdateUIMessages.SitePage_ignore);
+ envFilterCheck.setSelection(true);
+ toggleEnvFilter(true);
+ envFilterCheck.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ toggleEnvFilter(envFilterCheck.getSelection());
+ }
+ });
+ gd = new GridData();
+ gd.horizontalSpan = 2;
+ gd.verticalAlignment = SWT.BOTTOM;
+ envFilterCheck.setLayoutData(gd);
+
+
+ automaticallySelectMirrorsCheckbox = new Button(client, SWT.CHECK);
+ automaticallySelectMirrorsCheckbox.setText(UpdateUIMessages.SitePage_automaticallySelectMirrors);
+ automaticallySelectMirrorsCheckbox.setSelection(true);
+ automaticallySelectMirrorsCheckbox.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ automaticallySelectMirrors = automaticallySelectMirrorsCheckbox.getSelection();
+ UpdateCore.getPlugin().getPluginPreferences().setValue(UpdateCore.P_AUTOMATICALLY_CHOOSE_MIRROR, automaticallySelectMirrors);
+ }
+ });
+ gd = new GridData();
+ gd.horizontalSpan = 2;
+ gd.verticalAlignment = SWT.BOTTOM;
+ automaticallySelectMirrorsCheckbox.setLayoutData(gd);
+
+ Dialog.applyDialogFont(parent);
+
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(client, "org.eclipse.update.ui.SitePage"); //$NON-NLS-1$
+
+ return client;
+ }
+
+ private void createViewer(Composite parent) {
+ viewer =
+ CheckboxTableViewer.newCheckList(
+ parent,
+ SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+ viewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
+ viewer.setContentProvider(new IStructuredContentProvider() {
+ public Object[] getElements(Object parent) {
+ return getAllSiteBookmarks();
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput,
+ Object newInput) {
+ }
+ });
+ viewer.setLabelProvider(new SitesLabelProvider());
+ viewer.setInput(UpdateUI.getDefault().getUpdateModel());
+
+ // bug # 83212
+ viewer.setSorter( new ViewerSorter());
+
+
+ initializeItems();
+
+ viewer.addCheckStateListener(new ICheckStateListener() {
+ public void checkStateChanged(CheckStateChangedEvent e) {
+ Object element = e.getElement();
+ if (element instanceof SiteBookmark)
+ handleSiteChecked((SiteBookmark) element, e.getChecked());
+ }
+ });
+
+ viewer
+ .addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent e) {
+ handleSelectionChanged((IStructuredSelection) e.getSelection());
+ }
+ });
+
+ }
+
+ private void initializeItems() {
+ checkItems();
+ updateSearchRequest();
+ }
+
+ private void checkItems() {
+ TableItem[] items = viewer.getTable().getItems();
+ for (int i = 0; i < items.length; i++) {
+ SiteBookmark bookmark = (SiteBookmark) items[i].getData();
+ viewer.setChecked(bookmark, bookmark.isSelected());
+ }
+ }
+
+ private void handleAddSite() {
+ NewUpdateSiteDialog dialog = new NewUpdateSiteDialog(getShell(), getAllSiteBookmarks());
+ dialog.create();
+ dialog.getShell().setText(UpdateUIMessages.SitePage_new);
+ if (dialog.open() == NewUpdateSiteDialog.OK)
+ updateSearchRequest();
+ }
+
+ private void handleAddLocal() {
+ SiteBookmark siteBookmark = LocalSiteSelector.getLocaLSite(getShell(), this.getAllSiteBookmarks());
+ if (siteBookmark != null) {
+ if (handleNameEdit(siteBookmark) == EditSiteDialog.OK) {
+ siteBookmark.setSelected(true);
+ UpdateModel model = UpdateUI.getDefault().getUpdateModel();
+ model.addBookmark(siteBookmark);
+ model.saveBookmarks();
+ updateSearchRequest();
+ }
+ }
+ return;
+ }
+
+ private void handleAddLocalZipped() {
+ SiteBookmark siteBookmark = LocalSiteSelector
+ .getLocaLZippedSite(getShell(), this.getAllSiteBookmarks());
+ if (siteBookmark != null) {
+ if (handleNameEdit(siteBookmark) == EditSiteDialog.OK) {
+ siteBookmark.setSelected(true);
+ UpdateModel model = UpdateUI.getDefault().getUpdateModel();
+ model.addBookmark(siteBookmark);
+ model.saveBookmarks();
+ updateSearchRequest();
+ }
+ }
+ return;
+ }
+
+ private void handleRemove() {
+ BusyIndicator
+ .showWhile(viewer.getControl().getDisplay(), new Runnable() {
+ public void run() {
+ UpdateModel updateModel =
+ UpdateUI.getDefault().getUpdateModel();
+ IStructuredSelection ssel =
+ (IStructuredSelection) viewer.getSelection();
+ SiteBookmark bookmark = (SiteBookmark) ssel.getFirstElement();
+ String selName = bookmark.getLabel();
+ boolean answer = MessageDialog
+ .openQuestion(
+ getShell(),
+ UpdateUIMessages.SitePage_remove_location_conf_title,
+ UpdateUIMessages.SitePage_remove_location_conf
+ + " " + selName); //$NON-NLS-1$
+
+ if (answer && !bookmark.isReadOnly()) {
+ updateModel.removeBookmark(bookmark);
+ updateSearchRequest();
+ }
+ }
+ });
+ }
+
+ private void handleEdit() {
+ IStructuredSelection ssel =
+ (IStructuredSelection) viewer.getSelection();
+ SiteBookmark bookmark = (SiteBookmark) ssel.getFirstElement();
+ URL oldURL = bookmark.getURL();
+ EditSiteDialog dialog = new EditSiteDialog(getShell(), bookmark, getAllSiteBookmarks());
+ dialog.create();
+ String title = bookmark.isLocal() ? UpdateUIMessages.SitePage_dialogEditLocal : UpdateUIMessages.SitePage_dialogEditUpdateSite;
+ // //$NON-NLS-2$
+ dialog.getShell().setText(title);
+ if (dialog.open() == EditSiteDialog.OK ) {
+ URL newURL = bookmark.getURL();
+ if (!UpdateManagerUtils.sameURL(oldURL, newURL)) {
+ UpdateModel model = UpdateUI.getDefault().getUpdateModel();
+ model.fireObjectChanged(bookmark, null);
+ updateSearchRequest();
+ }
+ }
+ }
+
+ private void handleImport() {
+ SiteBookmark[] siteBookmarks = SitesImportExport.getImportedBookmarks(getShell());
+ if (siteBookmarks != null && siteBookmarks.length > 0) {
+ UpdateModel model = UpdateUI.getDefault().getUpdateModel();
+ SiteBookmark[] currentBookmarks = getAllSiteBookmarks();
+ for (int i=0; i<siteBookmarks.length; i++) {
+ boolean siteExists = false;
+ for (int j=0; !siteExists && j<currentBookmarks.length; j++)
+ if (currentBookmarks[j].getURL().equals(siteBookmarks[i].getURL()))
+ siteExists = true;
+ if (!siteExists)
+ model.addBookmark(siteBookmarks[i]);
+ }
+ model.saveBookmarks();
+ updateSearchRequest();
+ }
+ return;
+ }
+
+ private void handleExport() {
+ SitesImportExport.exportBookmarks(getShell(), getAllSiteBookmarks());
+ }
+
+ private int handleNameEdit(SiteBookmark bookmark) {
+ EditSiteDialog dialog = new EditSiteDialog(getShell(), bookmark, getAllSiteBookmarks(), true);
+ dialog.create();
+ String title = bookmark.isLocal() ? UpdateUIMessages.SitePage_dialogEditLocal : UpdateUIMessages.SitePage_dialogEditUpdateSite;
+ // //$NON-NLS-2$
+ dialog.getShell().setText(title);
+ int rc = dialog.open();
+ return rc;
+ }
+
+ private void handleSiteChecked(SiteBookmark bookmark, boolean checked) {
+ if (bookmark.isUnavailable()) {
+ bookmark.setSelected(false);
+ viewer.setChecked(bookmark, false);
+ return;
+ }
+
+ bookmark.setSelected(checked);
+ updateSearchRequest();
+ }
+
+
+ private void handleSelectionChanged(IStructuredSelection ssel) {
+ boolean enable = false;
+ Object item = ssel.getFirstElement();
+ String description = null;
+ if (item instanceof SiteBookmark) {
+ enable = !((SiteBookmark) item).isReadOnly();
+ description = ((SiteBookmark)item).getDescription();
+ } else if (item instanceof SiteCategory) {
+// IURLEntry descEntry = ((SiteCategory)item).getCategory().getDescription();
+// if (descEntry != null)
+// description = descEntry.getAnnotation();
+ }
+ editButton.setEnabled(enable);
+ removeButton.setEnabled(enable);
+
+ if (description == null)
+ description = ""; //$NON-NLS-1$
+ descLabel.setText(UpdateManagerUtils.getWritableXMLString(description));
+ }
+
+ private void updateSearchRequest() {
+ Object[] checked = viewer.getCheckedElements();
+
+ UpdateSearchScope scope = new UpdateSearchScope();
+ int nsites = 0;
+
+ for (int i = 0; i < checked.length; i++) {
+ if (checked[i] instanceof SiteBookmark) {
+ SiteBookmark bookmark = (SiteBookmark) checked[i];
+ scope.addSearchSite(
+ bookmark.getLabel(),
+ bookmark.getURL(),
+ bookmark.getIgnoredCategories());
+ nsites++;
+ }
+ }
+ searchRequest.setScope(scope);
+ setPageComplete(nsites > 0);
+ }
+
+ public UpdateSearchRequest getSearchRequest() {
+ return searchRequest;
+ }
+
+ public void setVisible(boolean value) {
+ super.setVisible(value);
+ if (value) {
+ // Reset all unavailable sites, so they can be tried again if the user wants it
+ SiteBookmark[] bookmarks = getAllSiteBookmarks();
+ for (int i=0; i<bookmarks.length; i++) {
+ if (bookmarks[i].isUnavailable())
+ bookmarks[i].setUnavailable(false);
+ }
+ automaticallySelectMirrors = UpdateCore.getPlugin().getPluginPreferences().getBoolean(UpdateCore.P_AUTOMATICALLY_CHOOSE_MIRROR);
+ automaticallySelectMirrorsCheckbox.setSelection(automaticallySelectMirrors);
+ }
+ }
+
+ private SiteBookmark[] getAllSiteBookmarks() {
+ UpdateModel model = UpdateUI.getDefault().getUpdateModel();
+ Object[] bookmarks = model.getBookmarkLeafs();
+ Object[] sitesToVisit =
+ discoveryFolder.getChildren(discoveryFolder);
+ SiteBookmark[] all = new SiteBookmark[bookmarks.length + sitesToVisit.length];
+ System.arraycopy(bookmarks, 0, all, 0, bookmarks.length);
+ System.arraycopy(
+ sitesToVisit,
+ 0,
+ all,
+ bookmarks.length,
+ sitesToVisit.length);
+ return all;
+ }
+
+ public boolean isPageComplete() {
+ return viewer.getCheckedElements().length != 0;
+ }
+}

Back to the top