// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.dataprofiler.core.ui.pref;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.preference.ScaleFieldEditor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.HeapStatus;
import org.talend.commons.ui.swt.preferences.CheckBoxFieldEditor;
import org.talend.dataprofiler.core.ImageLib;
import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl;
import org.talend.dq.analysis.memory.AnalysisThreadMemoryChangeNotifier;
/**
* DOC gdbu class global comment. Detailled comment
*/
@SuppressWarnings("restriction")
public class AnalysisTuningPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
public static final String CHECKED_ELEMENTS_LENGTH = "CHECKED_ELEMENTS_LENGTH";//$NON-NLS-1$
private Text textNumberOfConnectionsPerAnalysis;
private ScaleFieldEditor memoryScaleField;
private CheckBoxFieldEditor autoComboField;
private int memMax;
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
*/
public void init(IWorkbench workbench) {
busyGC();
Runtime runtime = Runtime.getRuntime();
convertToMeg(runtime.totalMemory());
memMax = convertToMeg(runtime.maxMemory());
convertToMeg(runtime.freeMemory());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createContents(Composite parent) {
Composite mainComposite = new Composite(parent, SWT.NONE);
mainComposite.setLayout(new GridLayout());
mainComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
Group group2 = new Group(mainComposite, SWT.SHADOW_ETCHED_IN);
group2.setText(DefaultMessagesImpl.getString("AnalysisTuningPreferencePage.MemoryGroup")); //$NON-NLS-1$
GridLayout gridLayout1 = new GridLayout(2, false);
group2.setLayout(gridLayout1);
GridData gridData1 = new GridData(GridData.FILL_HORIZONTAL);
group2.setLayoutData(gridData1);
Composite composite2 = new Composite(group2, SWT.NONE);
autoComboField = new CheckBoxFieldEditor(AnalysisThreadMemoryChangeNotifier.ANALYSIS_AUTOMATIC_MEMORY_CONTROL,
DefaultMessagesImpl.getString("AnalysisTuningPreferencePage.EnableThreadControl"), composite2); //$NON-NLS-1$
final Composite composite4 = new Composite(composite2, SWT.NONE);
composite4.setLayout(new GridLayout(4, false));
composite4.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
autoComboField.setPropertyChangeListener(new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
memoryScaleField.getScaleControl().setEnabled(Boolean.valueOf(event.getNewValue().toString()));
}
});
autoComboField.setPreferenceStore(PlatformUI.getPreferenceStore());
autoComboField.setPage(this);
autoComboField.load();
Label labelScale1 = new Label(composite4, SWT.NONE);
labelScale1.setText(DefaultMessagesImpl.getString("AnalysisTuningPreferencePage.ForceToStop")); //$NON-NLS-1$
final Label labelScale2 = new Label(composite4, SWT.RIGHT);
Label labelScale3 = new Label(composite4, SWT.NONE);
labelScale3.setText(DefaultMessagesImpl.getString("AnalysisTuningPreferencePage.Mb")); //$NON-NLS-1$
Composite compositeScale = new Composite(composite4, SWT.NONE);
compositeScale.setLayout(new GridLayout());
// MOD yyi 2012-04-18 TDQ-4916 scale layout fixed.
compositeScale.setLayoutData(gridData1);
// MOD yyi 2012-06-19 TDQ-4916 if the value is set to zero the threshold function would be disabled.
memoryScaleField = new ScaleFieldEditor(AnalysisThreadMemoryChangeNotifier.ANALYSIS_MEMORY_THRESHOLD,
"", compositeScale, 0, memMax, 1, 8); //$NON-NLS-1$
memoryScaleField.setPropertyChangeListener(new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
labelScale2.setText(event.getNewValue().toString());
composite4.pack();
}
});
memoryScaleField.setPreferenceStore(PlatformUI.getPreferenceStore());
memoryScaleField.setPage(this);
memoryScaleField.load();
labelScale2.setText(String.valueOf(memoryScaleField.getMaximum()));
labelScale2.setText(String.valueOf(memoryScaleField.getScaleControl().getSelection()));
if (!autoComboField.getBooleanValue()) {
memoryScaleField.getScaleControl().setEnabled(false);
}
Composite composite3 = new Composite(composite2, SWT.NONE);
composite3.setLayout(new GridLayout(4, false));
composite3.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Label label3 = new Label(composite3, SWT.NONE);
label3.setText(DefaultMessagesImpl.getString("AnalysisTuningPreferencePage.HeapStatus")); //$NON-NLS-1$
HeapStatus heap = new HeapStatus(composite3, PlatformUI.getPreferenceStore());
heap.setEnabled(false);
heap.setMenu(null);
CLabel label2 = new CLabel(composite2, SWT.WRAP);
label2.setText(DefaultMessagesImpl.getString("AnalysisTuningPreferencePage.JvmWarning")); //$NON-NLS-1$
label2.setImage(ImageLib.getImage(ImageLib.RED_WARNING_PNG));
return mainComposite;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.preference.PreferencePage#performDefaults()
*/
@Override
protected void performDefaults() {
// textAnalyzedColumnsLimit.setText(ELEMENTS_DEFAUL_TLENGTH + PluginConstant.EMPTY_STRING);
// PlatformUI.getPreferenceStore().setValue(CHECKED_ELEMENTS_LENGTH, textAnalyzedColumnsLimit.getText());
memoryScaleField.loadDefault();
autoComboField.loadDefault();
super.performDefaults();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.preference.PreferencePage#performOk()
*/
@Override
public boolean performOk() {
memoryScaleField.store();
autoComboField.store();
return super.performOk();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.preference.PreferencePage#performApply()
*/
@Override
protected void performApply() {
memoryScaleField.store();
autoComboField.store();
super.performApply();
}
private void busyGC() {
for (int i = 0; i < 2; ++i) {
System.gc();
System.runFinalization();
}
}
/**
* Converts the given number of bytes to the corresponding number of megabytes (rounded up).
*/
private int convertToMeg(long numBytes) {
return Integer.parseInt(String.valueOf((numBytes + (512 * 1024)) / (1024 * 1024)));
}
}