/******************************************************************************* * Copyright (c) 2012 AGETO Service GmbH 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: * Andreas Mihm - rework new admin ui *******************************************************************************/ package org.eclipse.gyrex.admin.ui.http.jetty.internal; import org.eclipse.gyrex.admin.ui.internal.application.AdminUiUtil; import org.eclipse.gyrex.admin.ui.internal.helper.SwtUtil; import org.eclipse.gyrex.admin.ui.internal.widgets.Infobox; import org.eclipse.gyrex.admin.ui.internal.widgets.NonBlockingMessageDialogs; import org.eclipse.gyrex.http.jetty.admin.ChannelDescriptor; import org.eclipse.gyrex.http.jetty.admin.IJettyManager; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.ListViewer; import org.eclipse.jface.viewers.SelectionChangedEvent; 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.List; /** * */ public class ChannelsArea { static class ChannelsLabelProvider extends LabelProvider { /** serialVersionUID */ private static final long serialVersionUID = 1L; @Override public String getText(final Object element) { if (element instanceof ChannelDescriptor) { final ChannelDescriptor channel = (ChannelDescriptor) element; return String.format("%s (%d)", channel.getId(), channel.getPort()); } return super.getText(element); } } private ISelectionChangedListener updateButtonsListener; private Button addButton; private Button removeButton; private ListViewer channelsList; private Composite pageComposite; public void activate() { if (channelsList != null) { channelsList.setInput(getJettyManager()); updateButtonsListener = new ISelectionChangedListener() { @Override public void selectionChanged(final SelectionChangedEvent event) { updateButtons(); } }; channelsList.addSelectionChangedListener(updateButtonsListener); } else { } } void addButtonPressed() { final AddChannelDialog dialog = new AddChannelDialog(SwtUtil.getShell(addButton), getJettyManager()); dialog.openNonBlocking(new DialogCallback() { /** serialVersionUID */ private static final long serialVersionUID = 1L; @Override public void dialogClosed(final int returnCode) { if (returnCode == Window.OK) { refresh(); } } }); } 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; } public void createChannelsControls(final Composite parent) { pageComposite = parent; final Infobox infobox = new Infobox(pageComposite); infobox.setLayoutData(AdminUiUtil.createHorzFillData()); infobox.addHeading("Jetty connectors in Gyrex."); infobox.addParagraph("Connectors are the ports Jetty listens on. When creating a connector, the port number and a name for the channel is required. Optional to that you can define the encryption settings, if the connector should support SSL."); final Composite description = new Composite(pageComposite, SWT.NONE); final GridData gd = AdminUiUtil.createFillData(); gd.verticalIndent = 10; description.setLayoutData(gd); description.setLayout(AdminUiUtil.createGridLayoutWithoutMargin(2, false)); channelsList = new ListViewer(description, SWT.SINGLE | SWT.BORDER); final List list = channelsList.getList(); list.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create()); channelsList.setContentProvider(new ArrayContentProvider()); channelsList.setLabelProvider(new ChannelsLabelProvider()); channelsList.setContentProvider(new ChannelsContentProvider()); final Composite buttons = new Composite(description, SWT.NONE); buttons.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true)); buttons.setLayout(new GridLayout()); addButton = createButton(buttons, "Add"); addButton.addSelectionListener(new SelectionAdapter() { /** serialVersionUID */ private static final long serialVersionUID = 1L; @Override public void widgetSelected(final SelectionEvent event) { addButtonPressed(); } }); removeButton = createButton(buttons, "Remove"); removeButton.setEnabled(false); removeButton.addSelectionListener(new SelectionAdapter() { /** serialVersionUID */ private static final long serialVersionUID = 1L; @Override public void widgetSelected(final SelectionEvent event) { removeButtonPressed(); } }); } public void deactivate() { // remove data inputs form controls if (channelsList != null) { if (updateButtonsListener != null) { channelsList.removeSelectionChangedListener(updateButtonsListener); updateButtonsListener = null; } if (!channelsList.getList().isDisposed()) { channelsList.setInput(null); } } } private IJettyManager getJettyManager() { return JettyConfigActivator.getInstance().getJettyManager(); } private ChannelDescriptor getSelectedChannel() { final IStructuredSelection selection = (IStructuredSelection) channelsList.getSelection(); if (!selection.isEmpty() && (selection.getFirstElement() instanceof ChannelDescriptor)) return (ChannelDescriptor) selection.getFirstElement(); return null; } public void refresh() { channelsList.refresh(); updateButtons(); } void removeButtonPressed() { final ChannelDescriptor channel = getSelectedChannel(); if (channel == null) return; NonBlockingMessageDialogs.openQuestion(SwtUtil.getShell(pageComposite), "Remove selected Channel", String.format("Do you really want to delete channel %s?", channel.getId()), new DialogCallback() { /** serialVersionUID */ private static final long serialVersionUID = 1L; @Override public void dialogClosed(final int returnCode) { if (returnCode != Window.OK) return; getJettyManager().removeChannel(channel.getId()); refresh(); } }); } void updateButtons() { final int selectedElementsCount = ((IStructuredSelection) channelsList.getSelection()).size(); if (selectedElementsCount == 0) { addButton.setEnabled(true); removeButton.setEnabled(false); return; } addButton.setEnabled(selectedElementsCount == 1); removeButton.setEnabled(selectedElementsCount == 1); } }