/*******************************************************************************
* Copyright (c) 2013 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:
* Gunnar Wagenknecht - initial API and implementation
*******************************************************************************/
package org.eclipse.gyrex.admin.ui.logback.internal.commonapenders;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.DialogField;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.IDialogFieldListener;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.LayoutUtil;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.SelectionButtonDialogFieldGroup;
import org.eclipse.gyrex.admin.ui.logback.configuration.wizard.AppenderConfigurationWizardSession;
import org.eclipse.gyrex.logback.config.model.Appender;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import ch.qos.logback.classic.Level;
/**
* Wizard page for configuring a threshold on any {@link Appender}.
*/
public class AppenderThresholdWizardPage extends WizardPage {
/** serialVersionUID */
private static final long serialVersionUID = 1L;
private static final int IDX_NONE = 0;
private static final int IDX_DEBUG = 1;
private static final int IDX_INFO = 2;
private static final int IDX_WARN = 3;
private static final int IDX_ERROR = 4;
private final SelectionButtonDialogFieldGroup thresholdField = new SelectionButtonDialogFieldGroup(SWT.RADIO, new String[] { "No filter", "DEBUG", "INFO", "WARN", "ERROR" }, 1);
private final AppenderConfigurationWizardSession session;
public AppenderThresholdWizardPage(final AppenderConfigurationWizardSession session) {
super("threshold");
this.session = session;
setTitle("Appender Threshold");
setDescription("Configure an appender threshold.");
}
@Override
public void createControl(final Composite parent) {
final Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(GridLayoutFactory.fillDefaults().create());
composite.setLayoutData(GridDataFactory.fillDefaults().minSize(convertVerticalDLUsToPixels(200), convertHorizontalDLUsToPixels(400)).create());
setControl(composite);
thresholdField.setLabelText("Only log events with a severity equal to or higher than:");
final IDialogFieldListener validateListener = new IDialogFieldListener() {
@Override
public void dialogFieldChanged(final DialogField field) {
validate();
}
};
thresholdField.setDialogFieldListener(validateListener);
LayoutUtil.doDefaultLayout(composite, new DialogField[] { thresholdField }, true);
final GridLayout layout = (GridLayout) thresholdField.getSelectionButtonsGroup(null).getLayout();
layout.marginLeft = 20;
if (session.getAppender() != null) {
final Level level = session.getAppender().getThreshold();
if (level != null) {
switch (level.levelInt) {
case Level.DEBUG_INT:
thresholdField.setSelection(IDX_DEBUG, true);
break;
case Level.INFO_INT:
thresholdField.setSelection(IDX_INFO, true);
break;
case Level.WARN_INT:
thresholdField.setSelection(IDX_WARN, true);
break;
case Level.ERROR_INT:
thresholdField.setSelection(IDX_ERROR, true);
break;
default:
thresholdField.setSelection(IDX_NONE, true);
break;
}
} else {
thresholdField.setSelection(IDX_NONE, true);
}
}
}
void validate() {
final Appender appender = session.getAppender();
if (appender == null) {
setMessage("Please select an appender type first!");
return;
}
if (thresholdField.isSelected(IDX_DEBUG)) {
appender.setThreshold(Level.DEBUG);
} else if (thresholdField.isSelected(IDX_INFO)) {
appender.setThreshold(Level.INFO);
} else if (thresholdField.isSelected(IDX_WARN)) {
appender.setThreshold(Level.WARN);
} else if (thresholdField.isSelected(IDX_ERROR)) {
appender.setThreshold(Level.ERROR);
} else {
appender.setThreshold(null);
}
setMessage(null);
setPageComplete(true);
}
}