hydrograph.ui.graph.execution.tracking.preferences.JobRunPreferenceComposite.java Source code

Java tutorial

Introduction

Here is the source code for hydrograph.ui.graph.execution.tracking.preferences.JobRunPreferenceComposite.java

Source

/********************************************************************************
 * Copyright 2017 Capital One Services, LLC and Bitwise, Inc.
 * 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 hydrograph.ui.graph.execution.tracking.preferences;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
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.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;

import hydrograph.ui.common.swt.customwidget.HydroGroup;
import hydrograph.ui.common.util.Constants;
import hydrograph.ui.common.util.OSValidator;
import hydrograph.ui.graph.Messages;

/**
 * @author Bitwise This class created the preference page for job run.
 *
 */
public class JobRunPreferenceComposite extends Composite {

    private static final String REGEX_POSITIVE_INTEGER_ONLY = "[\\d]*";
    private static final String HASH_REGEX = "#";
    private Button btnRadioButtonAlways;
    private Button btnRadioButtonPrompt;
    private CCombo ccLogLevels;
    private Text textWidget;
    private JobRunPreference jobRunPreference;

    JobRunPreferenceComposite(Composite parent, int none, String selection, String logLevel, String bufferSize,
            JobRunPreference jobRunPreference) {
        super(parent, none);
        setLayout(new GridLayout(1, false));

        createSaveJobPromtGroup(selection);

        createLogLevelGroup(logLevel);

        createConsoleBufferWidget(bufferSize);

        this.jobRunPreference = jobRunPreference;
    }

    /**
     * @param selection
     */
    private void createSaveJobPromtGroup(String selection) {
        HydroGroup hydroGroup = new HydroGroup(this, SWT.NONE);
        hydroGroup.setHydroGroupText(Messages.SAVE_JOBS_BEFORE_LAUNCHING_MESSAGE);
        hydroGroup.setLayout(new GridLayout(1, false));
        hydroGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        hydroGroup.getHydroGroupClientArea().setLayout(new GridLayout(2, false));
        hydroGroup.getHydroGroupClientArea().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

        btnRadioButtonAlways = new Button(hydroGroup.getHydroGroupClientArea(), SWT.RADIO);
        btnRadioButtonAlways.setText(StringUtils.capitalize((MessageDialogWithToggle.ALWAYS)));

        btnRadioButtonPrompt = new Button(hydroGroup.getHydroGroupClientArea(), SWT.RADIO);
        btnRadioButtonPrompt.setText(StringUtils.capitalize(MessageDialogWithToggle.PROMPT));

        if (StringUtils.equals(selection, MessageDialogWithToggle.ALWAYS)) {
            btnRadioButtonAlways.setSelection(true);
        } else {
            btnRadioButtonPrompt.setSelection(true);
        }
    }

    /**
     * @param logLevel 
     * 
     */
    private void createLogLevelGroup(String logLevel) {

        HydroGroup hydroGroup = new HydroGroup(this, SWT.NONE);

        hydroGroup.setHydroGroupText(Messages.LOG_LEVEL_PREF_MESSAGE);
        hydroGroup.setLayout(new GridLayout(1, false));
        hydroGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        hydroGroup.getHydroGroupClientArea().setLayout(new GridLayout(2, false));

        Label label = new Label(hydroGroup.getHydroGroupClientArea(), SWT.NONE);

        label.setText(Messages.LOG_LEVEL_CONSOLE_PREF_MESSAGE);

        ccLogLevels = new CCombo(hydroGroup.getHydroGroupClientArea(), SWT.BORDER);
        GridData gd_ccLogLevels = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        gd_ccLogLevels.widthHint = 300;
        if (OSValidator.isMac()) {
            gd_ccLogLevels.heightHint = 20;
        }
        ccLogLevels.setLayoutData(gd_ccLogLevels);

        ccLogLevels.setItems(Messages.COMBO_LOG_LEVELS.split(HASH_REGEX));

        ccLogLevels.setText(logLevel);

    }

    /**
     * Create console buffer widget
     * @param bufferSize
     */
    private void createConsoleBufferWidget(String bufferSize) {
        HydroGroup hydroGroup = new HydroGroup(this, SWT.NONE);

        hydroGroup.setHydroGroupText(Messages.HYDROGRAPH_CONSOLE_PREFERANCE_PAGE_GROUP_NAME);
        hydroGroup.setLayout(new GridLayout(1, false));
        hydroGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        hydroGroup.getHydroGroupClientArea().setLayout(new GridLayout(2, false));

        Label label = new Label(hydroGroup.getHydroGroupClientArea(), SWT.NONE);

        label.setText(Messages.PREFERANCE_CONSOLE_BUFFER_SIZE);

        textWidget = new Text(hydroGroup.getHydroGroupClientArea(), SWT.BORDER);
        textWidget.setText(bufferSize);
        textWidget.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        textWidget.setTextLimit(6);

        attachConsoleBufferValidator();

        Composite purgeComposite = new Composite(hydroGroup.getHydroGroupClientArea(), SWT.NONE);
        purgeComposite.setLayout(new GridLayout(2, false));
        purgeComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1));

        Label lblNote = new Label(purgeComposite, SWT.TOP | SWT.WRAP);
        lblNote.setText(Messages.PREFERANCE_PAGE_NOTE);
        FontData fontData = lblNote.getFont().getFontData()[0];
        Font font = new Font(purgeComposite.getDisplay(),
                new FontData(fontData.getName(), fontData.getHeight(), SWT.BOLD));
        lblNote.setFont(font);
        Label lblmsg = new Label(purgeComposite, SWT.TOP | SWT.WRAP);
        lblmsg.setText(Messages.UI_PERFORMANCE_NOTE_IN_CASE_OF_CHANGE_IN_BUFFER_SIZE);

    }

    private void attachConsoleBufferValidator() {
        textWidget.addModifyListener(new ModifyListener() {

            @Override
            public void modifyText(ModifyEvent e) {

                String text = textWidget.getText();
                setPreferanceError(null);
                if (StringUtils.isBlank(text)) {
                    setPreferanceError(Messages.PREFERANCE_ERROR_EMPTY_CONSOLE_BUFFER_FIELD);
                    return;
                }

                if (!isValidNumber(text)) {
                    setPreferanceError(Messages.PREFERANCE_ERROR_INVALID_CONSOLE_BUFFER_INPUT);
                    return;
                }

                int value = Integer.parseInt(text);
                if (!isValidConsoleBufferSize(value)) {
                    setPreferanceError(Messages.PREFERANCE_ERROR_INVALID_CONSOLE_BUFFER_INPUT);
                    return;
                } else {
                    setPreferanceError(null);
                }
            }
        });
    }

    protected boolean isValidConsoleBufferSize(int value) {
        if (value < 1000 || value > 40000) {
            return false;
        } else {
            return true;
        }
    }

    private boolean isValidNumber(String text) {
        Matcher matchs = Pattern.compile(REGEX_POSITIVE_INTEGER_ONLY).matcher(text);
        if (!matchs.matches()) {
            return false;
        } else {
            return true;
        }
    }

    private void setPreferanceError(String errorMessage) {
        if (!StringUtils.isBlank(errorMessage)) {
            jobRunPreference.setErrorMessage(errorMessage);
            jobRunPreference.setValid(false);
        } else {
            jobRunPreference.setErrorMessage(null);
            jobRunPreference.setValid(true);
        }

    }

    /**
     * @return selection of radio button
     */
    public boolean getAlwaysButtonSelection() {
        return btnRadioButtonAlways.getSelection();
    }

    /**
     * Set defaults values of job run preference
     */
    public void storeDefaults() {
        btnRadioButtonPrompt.setSelection(true);
        btnRadioButtonAlways.setSelection(false);
        ccLogLevels.select(3);
        textWidget.setText(Constants.DEFUALT_CONSOLE_BUFFER_SIZE);
    }

    /**
     * @return buffer size
     */
    public String getConsoleBufferSize() {
        return textWidget.getText();
    }

    /**
     * 
     * @return selected log level 
     */
    public String getLoglevel() {
        return ccLogLevels.getText();
    }
}