/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.motorolamobility.preflighting.ui.tabs;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Layout;
import org.eclipse.swt.widgets.Text;
import com.motorolamobility.preflighting.ui.PreflightingUIPlugin;
import com.motorolamobility.preflighting.ui.i18n.PreflightingUiNLS;
public class GeneralSettingsComposite extends AbstractAppValidatorTabComposite
{
/**
*
*/
public static enum outputTypes
{
TEXT, XML, CSV
};
private int outputTypeSelection;
private Text limitText;
private Button outputTypePlainText;
private Button outputTypeXML;
private Button outputTypeCSV;
private Combo warningCombo;
private Combo verbosityCombo;
private Button eclipseProblemToWarningButton;
private IPreferenceStore prefStore;
private String errorMessage;
/**
* @return the canFinish
*/
public boolean canFinish()
{
return canFinish;
}
/**
* @param canFinish the canFinish to set
*/
public void setCanFinish(boolean canFinish)
{
this.canFinish = canFinish;
}
private boolean canFinish = true;
/**
* @param parent
* @param style
*/
public GeneralSettingsComposite(Composite parent, int style)
{
super(parent, style);
prefStore = PreflightingUIPlugin.getDefault().getPreferenceStore();
outputTypeSelection =
Integer.parseInt(getPrefStoreValue(PreflightingUIPlugin.OUTPUT_TYPE_VALUE, "0"));
Layout layout = new GridLayout(1, true);
this.setLayout(layout);
this.setLayoutData(new GridData(GridData.FILL_BOTH));
Group limitGroup = new Group(this, SWT.NONE);
layout = new GridLayout(1, false);
limitGroup.setLayout(layout);
limitGroup.setText(PreflightingUiNLS.GeneralSettingsComposite_OutputSettingLabel);
limitGroup.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
Composite limitsComposite = new Composite(limitGroup, SWT.NONE);
limitsComposite.setLayout(new GridLayout(3, false));
limitsComposite.setLayoutData(new GridData(SWT.LEFT, SWT.NONE, true, false));
Label limitLabel = new Label(limitsComposite, SWT.NONE);
limitLabel.setText(PreflightingUiNLS.GeneralSettingsComposite_OutputLimit);
GridData labelData = new GridData(SWT.LEFT, SWT.NONE, false, false);
limitLabel.setLayoutData(labelData);
limitText = new Text(limitsComposite, SWT.BORDER);
GridData textLayoutData = new GridData(SWT.LEFT, SWT.NONE, false, false);
textLayoutData.widthHint = 70;
limitText.setLayoutData(textLayoutData);
limitText.setText(getPrefStoreValue(PreflightingUIPlugin.OUTPUT_LIMIT_VALUE,
(PreflightingUIPlugin.OUTPUT_LIMIT_DEFAULT_VALUE)));
limitText.addModifyListener(new ModifyListener()
{
public void modifyText(ModifyEvent e)
{
int value = 0;
canFinish = true;
try
{
value = Integer.parseInt(limitText.getText());
if (value < 0)
{
canFinish = false;
errorMessage =
PreflightingUiNLS.GeneralSettingsComposite_OutputLimitNaNValidationMessage;
}
}
catch (NumberFormatException exc)
{
canFinish = false;
errorMessage =
PreflightingUiNLS.GeneralSettingsComposite_OutputLimitNaNValidationMessage;
}
notifyListener();
}
});
Label limitDefaultLabel = new Label(limitsComposite, SWT.NONE);
limitDefaultLabel.setText(PreflightingUiNLS.GeneralSettingsComposite_LimitLabel);
FontData[] oldFontData = limitDefaultLabel.getFont().getFontData();
for (FontData f : oldFontData)
{
f.setStyle(f.getStyle() | SWT.ITALIC);
}
Font newItFont = new Font(getDisplay(), oldFontData);
limitDefaultLabel.setFont(newItFont);
limitDefaultLabel.setLayoutData(new GridData(SWT.NONE, SWT.NONE, true, false));
Composite outputTypeComposite = new Composite(limitGroup, SWT.NONE);
layout = new GridLayout(1, false);
outputTypeComposite.setLayout(layout);
outputTypeComposite.setLayoutData(new GridData(SWT.NONE, SWT.NONE, true, false));
Label outputTypeLabel = new Label(outputTypeComposite, SWT.LEFT);
outputTypeLabel.setText(PreflightingUiNLS.GeneralSettingsComposite_OutputTypeLabel);
String outputType =
getPrefStoreValue(PreflightingUIPlugin.OUTPUT_TYPE_VALUE,
PreflightingUIPlugin.OUTPUT_TYPE_DEFAULT_VALUE);
outputTypePlainText = new Button(outputTypeComposite, SWT.RADIO);
outputTypePlainText
.setText(PreflightingUiNLS.GeneralSettingsComposite_PlainTextRadioButton);
outputTypePlainText.setSelection(outputType.equals(String.valueOf(outputTypes.TEXT
.ordinal())));
outputTypePlainText.addSelectionListener(new SelectionListener()
{
public void widgetSelected(SelectionEvent e)
{
if (outputTypePlainText.getSelection())
{
outputTypeSelection = outputTypes.TEXT.ordinal();
}
}
public void widgetDefaultSelected(SelectionEvent e)
{
//do nothing
}
});
outputTypeXML = new Button(outputTypeComposite, SWT.RADIO);
outputTypeXML.setText(PreflightingUiNLS.GeneralSettingsComposite_XMLOutputCombo);
outputTypeXML.setSelection(outputType.equals(String.valueOf(outputTypes.XML.ordinal()))); //$NON-NLS-1$
outputTypeXML.addSelectionListener(new SelectionListener()
{
public void widgetSelected(SelectionEvent e)
{
if (outputTypeXML.getSelection())
{
outputTypeSelection = outputTypes.XML.ordinal();
}
}
public void widgetDefaultSelected(SelectionEvent e)
{
//do nothing
}
});
outputTypeCSV = new Button(outputTypeComposite, SWT.RADIO);
outputTypeCSV.setText(PreflightingUiNLS.GeneralSettingsComposite_CSVOutputCombo);
outputTypeCSV.setSelection(outputType.equals(String.valueOf(outputTypes.CSV.ordinal()))); //$NON-NLS-1$
outputTypeCSV.addSelectionListener(new SelectionListener()
{
public void widgetSelected(SelectionEvent e)
{
if (outputTypeCSV.getSelection())
{
outputTypeSelection = outputTypes.CSV.ordinal();
}
}
public void widgetDefaultSelected(SelectionEvent e)
{
//do nothing
}
});
Group verbosityGroup = new Group(this, SWT.NONE);
layout = new GridLayout(1, false);
verbosityGroup.setLayout(layout);
verbosityGroup.setText(PreflightingUiNLS.GeneralSettingsComposite_VerbositySettingLabel);
verbosityGroup.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
Label warningLevelsLabel = new Label(verbosityGroup, SWT.NONE);
warningLevelsLabel.setText(PreflightingUiNLS.GeneralSettingsComposite_WarningLevelSettings);
warningCombo = new Combo(verbosityGroup, SWT.BORDER | SWT.READ_ONLY);
GridData comboLayoutData = new GridData(SWT.NONE, SWT.NONE, false, true);
comboLayoutData.widthHint = 400;
warningCombo.setLayoutData(comboLayoutData);
warningCombo.add(PreflightingUiNLS.GeneralSettingsComposite_WarningLevel0);
warningCombo.add(PreflightingUiNLS.GeneralSettingsComposite_WarningLevel1);
warningCombo.add(PreflightingUiNLS.GeneralSettingsComposite_WarningLevel2);
warningCombo.add(PreflightingUiNLS.GeneralSettingsComposite_WarningLevel3);
warningCombo.add(PreflightingUiNLS.GeneralSettingsComposite_WarningLevel4);
warningCombo.select(Integer.parseInt(getPrefStoreValue(
PreflightingUIPlugin.WARNING_LEVEL_VALUE,
PreflightingUIPlugin.WARNING_LEVEL_DEFAULT_VALUE)));
Label verbosityLevelsLabel = new Label(verbosityGroup, SWT.NONE);
verbosityLevelsLabel
.setText(PreflightingUiNLS.GeneralSettingsComposite_VerbosityLevelLabel);
verbosityCombo = new Combo(verbosityGroup, SWT.BORDER | SWT.READ_ONLY);
verbosityCombo.setLayoutData(comboLayoutData);
verbosityCombo.add(PreflightingUiNLS.GeneralSettingsComposite_VerbosityLevel0);
verbosityCombo.add(PreflightingUiNLS.GeneralSettingsComposite_VerbosityLevel1);
verbosityCombo.add(PreflightingUiNLS.GeneralSettingsComposite_VerbosityLevel2);
verbosityCombo.select(Integer.parseInt(getPrefStoreValue(
PreflightingUIPlugin.VERBOSITY_LEVEL_VALUE,
PreflightingUIPlugin.VERBOSITY_LEVEL_DEFAULT_VALUE)));
eclipseProblemToWarningButton = new Button(this, SWT.CHECK);
eclipseProblemToWarningButton
.setText(PreflightingUiNLS.GeneralSettingsComposite_ShowErrosProblemsButton);
eclipseProblemToWarningButton.setSelection(Boolean.parseBoolean(getPrefStoreValue(
PreflightingUIPlugin.ECLIPSE_PROBLEM_TO_WARNING_VALUE,
PreflightingUIPlugin.ECLIPSE_PROBLEM_TO_WARNING_DEFAULT_VALUE)));
}
@Override
public void performDefaults()
{
limitText.setText(PreflightingUIPlugin.OUTPUT_LIMIT_DEFAULT_VALUE); //$NON-NLS-1$
outputTypePlainText.setSelection(true);
outputTypeSelection = 0;
outputTypeXML.setSelection(false);
outputTypeCSV.setSelection(false);
warningCombo.select(Integer.valueOf(PreflightingUIPlugin.WARNING_LEVEL_DEFAULT_VALUE));
verbosityCombo.select(0);
eclipseProblemToWarningButton.setSelection(true);
}
private String getPrefStoreValue(String prefKey, String defaultValue)
{
String returnValue = null;
if (!prefStore.isDefault(prefKey))
{
returnValue = prefStore.getString(prefKey);
}
else
{
returnValue = defaultValue;
}
return returnValue;
}
@Override
public IStatus isValid()
{
IStatus status =
new Status(IStatus.OK, PreflightingUIPlugin.PREFLIGHTING_UI_PLUGIN_ID,
PreflightingUiNLS.GeneralSettingsComposite_24);
if (!canFinish())
{
status =
new Status(IStatus.ERROR, PreflightingUIPlugin.PREFLIGHTING_UI_PLUGIN_ID,
errorMessage);
}
return status;
}
@Override
public void performOk(IPreferenceStore preferenceStore)
{
preferenceStore.setValue(PreflightingUIPlugin.OUTPUT_LIMIT_VALUE, limitText.getText());
preferenceStore.setValue(PreflightingUIPlugin.OUTPUT_TYPE_VALUE,
String.valueOf(outputTypeSelection));
preferenceStore.setValue(PreflightingUIPlugin.WARNING_LEVEL_VALUE,
String.valueOf(warningCombo.getSelectionIndex()));
preferenceStore.setValue(PreflightingUIPlugin.VERBOSITY_LEVEL_VALUE,
String.valueOf(verbosityCombo.getSelectionIndex()));
preferenceStore.setValue(PreflightingUIPlugin.ECLIPSE_PROBLEM_TO_WARNING_VALUE,
Boolean.toString(eclipseProblemToWarningButton.getSelection()));
}
@Override
public String commandLineBuilder()
{
StringBuilder commandLine = new StringBuilder();
//First part: output limit
String limit = limitText.getText();
commandLine.append(!limit.equals("0") ? "-limit " + limit + " " : "");
//Second, output type
commandLine.append("-output "
+ GeneralSettingsComposite.outputTypes.values()[outputTypeSelection].toString()
.toLowerCase() + " ");
//warning levels
commandLine.append("-w" + String.valueOf(warningCombo.getSelectionIndex()) + " ");
//verbosity levels
commandLine.append("-v" + String.valueOf(verbosityCombo.getSelectionIndex()) + " ");
return commandLine.toString().trim();
}
}