/**
* Copyright (c) 2011, 2012 Gunnar Wagenknecht 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:
* Gunnar Wagenknecht - initial API and implementation
* Peter Grube - rework new Admin UI
*/
package org.eclipse.gyrex.admin.ui.p2.internal;
import org.eclipse.gyrex.admin.ui.internal.helper.SwtUtil;
import org.eclipse.gyrex.admin.ui.internal.widgets.NonBlockingMessageDialogs;
import org.eclipse.gyrex.admin.ui.pages.AdminPage;
import org.eclipse.gyrex.p2.internal.P2Activator;
import org.eclipse.gyrex.p2.internal.packages.IPackageManager;
import org.eclipse.gyrex.p2.internal.packages.PackageDefinition;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.jface.databinding.viewers.ViewersObservables;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.window.Window;
import org.eclipse.rap.rwt.widgets.DialogCallback;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Label;
import org.eclipse.swt.widgets.List;
public class PackagesSection {
private final Composite parent;
private Button addButton;
private Button removeButton;
private Button provisionButton;
private Button revokeButton;
private ListViewer packagesList;
private IObservableValue selectedPackageValue;
/**
* Creates a new instance.
*
* @param parent
* @param page
*/
@Deprecated
public PackagesSection(final Composite parent, final AdminPage page) {
this.parent = parent;
// super(parent, page.getManagedForm().getToolkit(), Section.DESCRIPTION | ExpandableComposite.TITLE_BAR);
// bindingContext = page.getBindingContext();
// final Section section = getSection();
// section.setText("Software Packages");
// section.setDescription("Define the installable packages.");
createContent(this.parent);
}
//
void addButtonPressed() {
final EditPackageDialog dialog = new EditPackageDialog(SwtUtil.getShell(addButton), getPackageManager(), null);
dialog.openNonBlocking(new DialogCallback() {
/** serialVersionUID */
private static final long serialVersionUID = 1L;
@Override
public void dialogClosed(final int returnCode) {
if (returnCode == Window.OK) {
refresh();
// markStale();
}
}
});
}
private Button createButton(final Composite buttons, final String buttonLabel) {
final Button b = new Button(buttons, SWT.NONE);
b.setText(buttonLabel);
b.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
return b;
}
protected void createButtons(final Composite buttonsPanel) {
addButton = createButton(buttonsPanel, "Add...");
addButton.addSelectionListener(new SelectionAdapter() {
/** serialVersionUID */
private static final long serialVersionUID = 1L;
@Override
public void widgetSelected(final SelectionEvent e) {
addButtonPressed();
}
});
removeButton = createButton(buttonsPanel, "Remove...");
removeButton.addSelectionListener(new SelectionAdapter() {
/** serialVersionUID */
private static final long serialVersionUID = 1L;
@Override
public void widgetSelected(final SelectionEvent e) {
removeButtonPressed();
}
});
createButtonsSeparator(buttonsPanel);
provisionButton = createButton(buttonsPanel, "Provision");
provisionButton.addSelectionListener(new SelectionAdapter() {
/** serialVersionUID */
private static final long serialVersionUID = 1L;
@Override
public void widgetSelected(final SelectionEvent e) {
provisionButtonPressed();
}
});
revokeButton = createButton(buttonsPanel, "Revoke");
revokeButton.addSelectionListener(new SelectionAdapter() {
/** serialVersionUID */
private static final long serialVersionUID = 1L;
@Override
public void widgetSelected(final SelectionEvent e) {
revokeButtonPressed();
}
});
}
private Label createButtonsSeparator(final Composite parent) {
final Label separator = new Label(parent, SWT.NONE);
separator.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
return separator;
}
void createContent(final Composite parent) {
packagesList = new ListViewer(parent, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
final List list = packagesList.getList();
// getToolkit().adapt(list, true, true);
list.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
packagesList.setContentProvider(new ArrayContentProvider());
packagesList.setLabelProvider(new P2UiLabelProvider());
selectedPackageValue = ViewersObservables.observeSingleSelection(packagesList);
final Composite buttons = new Composite(parent, SWT.NONE);
buttons.setLayoutData(new GridData(SWT.BEGINNING, SWT.FILL, false, true));
buttons.setLayout(new GridLayout());
createButtons(buttons);
updateButtons();
}
// @Override
protected void createViewer(final Composite parent) {
// packagesList = new ListViewer(parent, getToolkit().getBorderStyle() | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
//
// final List list = packagesList.getList();
// getToolkit().adapt(list, true, true);
// list.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create());
//
// packagesList.setContentProvider(new ArrayContentProvider());
// packagesList.setLabelProvider(new P2UiLabelProvider());
//
selectedPackageValue = ViewersObservables.observeSingleSelection(packagesList);
}
//
// /**
// * Returns the bindingContext.
// *
// * @return the bindingContext
// */
// public DataBindingContext getBindingContext() {
// return bindingContext;
// }
//
IPackageManager getPackageManager() {
return P2Activator.getInstance().getPackageManager();
// return P2UiActivator.getInstance().getService(IPackageManager.class);
}
private PackageDefinition getSelectedPackage() {
return (PackageDefinition) (null != selectedPackageValue ? selectedPackageValue.getValue() : null);
}
//
// @Override
// public void initialize(final IManagedForm form) {
//// super.initialize(form);
//
// final UpdateValueStrategy modelToTarget = new UpdateValueStrategy();
//// modelToTarget.setConverter(new TrueWhenListSelectionNotEmptyConverter());
// getBindingContext().bindValue(SWTObservables.observeEnabled(removeButton), SWTObservables.observeSelection(packagesList.getControl()), new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER), modelToTarget);
// getBindingContext().bindValue(SWTObservables.observeEnabled(provisionButton), SWTObservables.observeSelection(packagesList.getControl()), new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER), modelToTarget);
// getBindingContext().bindValue(SWTObservables.observeEnabled(revokeButton), SWTObservables.observeSelection(packagesList.getControl()), new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER), modelToTarget);
// }
void provisionButtonPressed() {
final PackageDefinition pkg = getSelectedPackage();
if (pkg == null) {
return;
}
getPackageManager().markedForInstall(pkg);
updateButtons();
// markStale();
}
public void refresh() {
packagesList.setInput(getPackageManager().getPackages());
updateButtons();
// super.refresh();
}
void removeButtonPressed() {
final PackageDefinition pkg = getSelectedPackage();
if (pkg == null) {
return;
}
NonBlockingMessageDialogs.openQuestion(SwtUtil.getShell(removeButton), "Remove Package", "Do you really want to delete the package?", new DialogCallback() {
/** serialVersionUID */
private static final long serialVersionUID = 1L;
@Override
public void dialogClosed(final int returnCode) {
// TODO Auto-generated method stub
if (returnCode == Window.OK) {
getPackageManager().removePackage(pkg.getId());
refresh();
}
}
});
}
void revokeButtonPressed() {
final PackageDefinition pkg = getSelectedPackage();
if (pkg == null) {
return;
}
getPackageManager().markedForUninstall(pkg);
updateButtons();
// markStale();
}
void updateButtons() {
if (getSelectedPackage() == null) {
removeButton.setEnabled(false);
provisionButton.setEnabled(false);
revokeButton.setEnabled(false);
} else {
if (getPackageManager().isMarkedForInstall(getSelectedPackage())) {
provisionButton.setEnabled(false);
revokeButton.setEnabled(true);
}
if (getPackageManager().isMarkedForUninstall(getSelectedPackage())) {
revokeButton.setEnabled(false);
provisionButton.setEnabled(true);
}
}
}
}