/*******************************************************************************
* Copyright (c) 2007 Jeff Mesnil
* 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
*******************************************************************************/
package net.jmesnil.jmx.ui.internal.editors;
import net.jmesnil.jmx.resources.MBeanInfoWrapper;
import net.jmesnil.jmx.resources.MBeanNotificationInfoWrapper;
import net.jmesnil.jmx.ui.internal.Messages;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.editor.FormPage;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
public class InfoPage extends FormPage {
static final String ID = "info"; //$NON-NLS-1$
private MBeanInfoWrapper wrapper;
private Font bold;
public InfoPage(FormEditor editor) {
super(editor, ID, Messages.InfoPage_title);
MBeanEditorInput input = (MBeanEditorInput) editor.getEditorInput();
this.wrapper = input.getWrapper();
}
protected void createFormContent(IManagedForm managedForm) {
ScrolledForm form = managedForm.getForm();
form.setText(wrapper.getObjectName().toString());
FormToolkit toolkit = managedForm.getToolkit();
form.getForm().setSeparatorVisible(true);
Composite body = form.getBody();
FontData fd[] = body.getFont().getFontData();
bold = new Font(body.getDisplay(), fd[0].getName(), fd[0].getHeight(),
SWT.BOLD);
GridLayout layout = new GridLayout(2, false);
body.setLayout(layout);
GridDataFactory defaultGridData = GridDataFactory.fillDefaults();
String className = wrapper.getMBeanInfo().getClassName();
toolkit.createLabel(body, Messages.className);
Label classNameLabel = toolkit.createLabel(body, className, SWT.WRAP
| SWT.READ_ONLY);
classNameLabel.setFont(bold);
classNameLabel.setLayoutData(defaultGridData.create());
String description = wrapper.getMBeanInfo().getDescription();
toolkit.createLabel(body, Messages.description);
Text descriptionText = toolkit.createText(body, description, SWT.MULTI
| SWT.WRAP | SWT.READ_ONLY);
descriptionText.setLayoutData(defaultGridData.create());
Section notifSection = toolkit.createSection(body, Section.TITLE_BAR
| Section.TWISTIE | Section.TWISTIE);
notifSection.setText(Messages.InfoPage_notificationsSectionTitle);
GridDataFactory.fillDefaults().span(2, 1).grab(true, true).applyTo(
notifSection);
if (wrapper.getMBeanNotificationInfoWrappers().length == 0) {
notifSection.setEnabled(false);
notifSection.setExpanded(false);
} else {
notifSection.setEnabled(true);
notifSection.setExpanded(true);
}
Composite notificationContainer = toolkit.createComposite(notifSection);
notifSection.setClient(notificationContainer);
GridLayoutFactory.fillDefaults().generateLayout(notificationContainer);
Tree notificationTree = toolkit.createTree(notificationContainer,
SWT.BORDER);
GridDataFactory.fillDefaults().hint(500, 150).applyTo(notificationTree);
TreeViewer notificationViewer = new TreeViewer(notificationTree);
notificationViewer.setLabelProvider(new LabelProvider() {
public String getText(Object element) {
if (element instanceof MBeanNotificationInfoWrapper) {
MBeanNotificationInfoWrapper notifWrapper = (MBeanNotificationInfoWrapper) element;
return notifWrapper.getMBeanNotificationInfo().getName();
}
return super.getText(element);
}
});
notificationViewer.setContentProvider(new ITreeContentProvider() {
public Object[] getChildren(Object parent) {
if (parent instanceof MBeanNotificationInfoWrapper) {
MBeanNotificationInfoWrapper notifWrapper = (MBeanNotificationInfoWrapper) parent;
return notifWrapper.getMBeanNotificationInfo()
.getNotifTypes();
}
return new Object[0];
}
public Object getParent(Object element) {
return null;
}
public boolean hasChildren(Object element) {
if (element instanceof MBeanNotificationInfoWrapper) {
MBeanNotificationInfoWrapper notifWrapper = (MBeanNotificationInfoWrapper) element;
return (notifWrapper.getMBeanNotificationInfo()
.getNotifTypes().length > 0);
}
return false;
}
public Object[] getElements(Object input) {
return ((MBeanInfoWrapper) input)
.getMBeanNotificationInfoWrappers();
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput,
Object newInput) {
}
});
notificationViewer.setInput(wrapper);
}
@Override
public void dispose() {
super.dispose();
if (bold != null) {
bold.dispose();
}
}
}