/*******************************************************************************
* 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 static org.apache.commons.lang.StringUtils.isBlank;
import static org.apache.commons.lang.StringUtils.isNotBlank;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.DescriptionDialogField;
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.internal.wizards.dialogfields.Separator;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.StringDialogField;
import org.eclipse.gyrex.admin.ui.logback.configuration.wizard.AppenderConfigurationWizardSession;
import org.eclipse.gyrex.logback.config.model.Appender;
import org.eclipse.gyrex.logback.config.model.ConsoleAppender;
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.widgets.Composite;
import ch.qos.logback.core.joran.spi.ConsoleTarget;
/**
* Wizard page for {@link ConsoleAppender}.
*/
public class ConsoleAppenderWizardPage extends WizardPage {
private static final int INDEX_STD_ERR = 1;
/** serialVersionUID */
private static final long serialVersionUID = 1L;
private final StringDialogField patternField = new StringDialogField();
private final DescriptionDialogField patternDescriptionField = new DescriptionDialogField();
SelectionButtonDialogFieldGroup targetGroup = new SelectionButtonDialogFieldGroup(SWT.RADIO, new String[] { "STDOUT", "STDERR" }, 2);
private final ConsoleAppender appender;
public ConsoleAppenderWizardPage(final AppenderConfigurationWizardSession session) {
super("console");
final Appender appender = session.getAppender();
if (appender instanceof ConsoleAppender) {
this.appender = (ConsoleAppender) appender;
} else {
this.appender = new ConsoleAppender();
session.setAppender(this.appender);
}
setTitle("Console Appender");
setDescription("Configure details for a console appender.");
}
@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);
targetGroup.setLabelText("Output to:");
patternField.setLabelText("Pattern:");
patternDescriptionField.setText("<small>Please have a look at <a href=\"http://logback.qos.ch/\">the Logback documentation</a> for possible patterns or leave empty for a system default.</small>");
final IDialogFieldListener validateListener = new IDialogFieldListener() {
@Override
public void dialogFieldChanged(final DialogField field) {
validate();
}
};
patternDescriptionField.setDialogFieldListener(validateListener);
patternField.setDialogFieldListener(validateListener);
LayoutUtil.doDefaultLayout(composite, new DialogField[] { targetGroup, new Separator(), patternField, patternDescriptionField }, false);
LayoutUtil.setHorizontalGrabbing(targetGroup.getSelectionButtonsGroup(null));
LayoutUtil.setHorizontalGrabbing(patternField.getTextControl(null));
LayoutUtil.setHorizontalGrabbing(patternDescriptionField.getDescriptionControl(null));
if (appender != null) {
if (isNotBlank(appender.getPattern())) {
patternField.setText(appender.getPattern());
}
if (appender.getTarget() == ConsoleTarget.SystemErr) {
targetGroup.setSelection(INDEX_STD_ERR, true);
}
}
}
public String getPattern() {
return patternField.getText();
}
private ConsoleTarget getTarget() {
return targetGroup.isSelected(INDEX_STD_ERR) ? ConsoleTarget.SystemErr : ConsoleTarget.SystemOut;
}
void validate() {
final String pattern = getPattern();
appender.setPattern(isBlank(pattern) ? null : pattern);
appender.setTarget(getTarget());
setMessage(null);
setPageComplete(true);
}
}