org.switchyard.tools.ui.editor.components.rules.NewRulesDetailsWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for org.switchyard.tools.ui.editor.components.rules.NewRulesDetailsWizardPage.java

Source

/*************************************************************************************
 * Copyright (c) 2012 Red Hat, Inc. 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:
 *     JBoss by Red Hat - Initial implementation.
 ************************************************************************************/
package org.switchyard.tools.ui.editor.components.rules;

import java.math.BigInteger;

import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.switchyard.tools.models.switchyard1_0.rules.LoggerType;
import org.switchyard.tools.models.switchyard1_0.rules.LoggerType1;
import org.switchyard.tools.models.switchyard1_0.rules.RulesFactory;
import org.switchyard.tools.ui.JavaUtil;
import org.switchyard.tools.ui.editor.Messages;

/**
 * NewRulesDetailsWizardPage
 * 
 * <p/>
 * Collects high level details about the rules resource to be created, e.g.
 * package, input, auditing.
 * 
 * @author Rob Cernich
 */
public class NewRulesDetailsWizardPage extends WizardPage {

    private String _packageName;
    private Text _packageNameText;
    private boolean _agent;
    private Button _agentCheckbox;
    private String _messageName;
    private Text _messageNameText;
    private boolean _auditingEnabled;
    private Button _auditingEnabledCheckbox;
    private LoggerType1 _auditSettings = RulesFactory.eINSTANCE.createLoggerType1();
    private Text _auditLogText;
    private Text _auditIntervalText;
    private ComboViewer _auditTypeList;
    private String _oldPackageName;

    /**
     * Create a new NewRulesDetailsWizardPage.
     * 
     * @param pageName the page name
     */
    public NewRulesDetailsWizardPage(String pageName) {
        super(pageName);
        setTitle(Messages.title_rulesImplementationDetails);
        setDescription(Messages.description_rulesImplementationDetails);
    }

    @Override
    public void createControl(Composite parent) {
        Composite contents = new Composite(parent, SWT.NONE);
        contents.setLayout(new GridLayout(2, false));

        createLabel(contents, Messages.label_packageName);
        _packageNameText = new Text(contents, SWT.SINGLE | SWT.BORDER);
        _packageNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        _packageNameText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent event) {
                _packageName = _packageNameText.getText();
                validate();
            }
        });

        createLabel(contents, Messages.label_inputVariable);
        _messageNameText = new Text(contents, SWT.SINGLE | SWT.BORDER);
        _messageNameText.setToolTipText(Messages.tooltip_inputVariable);
        _messageNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        _messageNameText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent event) {
                _messageName = _messageNameText.getText();
                validate();
            }
        });

        // TODO: enable once we figure out what "agent" means
        // _agentCheckbox = new Button(contents, SWT.CHECK);
        // _agentCheckbox.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,
        // false, 2, 1));
        // _agentCheckbox.setText("Use KnowledgeAgent");
        // _agentCheckbox.addSelectionListener(new SelectionAdapter() {
        // @Override
        // public void widgetSelected(SelectionEvent event) {
        // _agent = _agentCheckbox.getSelection();
        // validate();
        // }
        // });

        createAuditSettingsGroup(contents);

        initControls();
        validate();
        setErrorMessage(null);

        setControl(contents);
    }

    private void createAuditSettingsGroup(Composite contents) {
        final Group auditSettingsGroup = new Group(contents, SWT.NONE);
        auditSettingsGroup.setLayout(new GridLayout(2, false));
        auditSettingsGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
        auditSettingsGroup.setText(Messages.label_auditSettings);

        _auditingEnabledCheckbox = new Button(auditSettingsGroup, SWT.CHECK);
        _auditingEnabledCheckbox.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
        _auditingEnabledCheckbox.setText(Messages.label_enableAuditing);
        _auditingEnabledCheckbox.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent event) {
                _auditingEnabled = _auditingEnabledCheckbox.getSelection();
                updateAuditControls();
                validate();
            }
        });

        createLabel(auditSettingsGroup, Messages.label_logName);
        _auditLogText = new Text(auditSettingsGroup, SWT.SINGLE | SWT.BORDER);
        _auditLogText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        _auditLogText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent event) {
                _auditSettings.setLog(nullForEmpty(_auditLogText.getText()));
                validate();
            }
        });

        createLabel(auditSettingsGroup, Messages.label_interval);
        _auditIntervalText = new Text(auditSettingsGroup, SWT.SINGLE | SWT.BORDER);
        _auditIntervalText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        _auditIntervalText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent event) {
                try {
                    _auditSettings.setInterval(BigInteger.valueOf(Integer.parseInt(_auditIntervalText.getText())));
                } catch (NumberFormatException e) {
                    e.fillInStackTrace();
                }
                validate();
            }
        });

        createLabel(auditSettingsGroup, Messages.label_logType);
        _auditTypeList = new ComboViewer(auditSettingsGroup, SWT.DROP_DOWN);
        _auditTypeList.setLabelProvider(new LabelProvider() {
            @Override
            public String getText(Object element) {
                if (element instanceof LoggerType) {
                    return ((LoggerType) element).getLiteral();
                }
                return super.getText(element);
            }
        });
        _auditTypeList.setContentProvider(ArrayContentProvider.getInstance());
        _auditTypeList.setInput(LoggerType.values());
    }

    private Label createLabel(Composite parent, String text) {
        Label label = new Label(parent, SWT.NONE);
        label.setText(text);
        return label;
    }

    /**
     * @return the package name.
     */
    public String getPackageName() {
        return emptyForNull(_packageName);
    }

    /**
     * @param packageName The package name to set.
     */
    public void setPackageName(String packageName) {
        if (_packageNameText == null) {
            _packageName = packageName;
        } else {
            _packageNameText.setText(packageName);
        }
    }

    /**
     * @return is agent.
     */
    public boolean isAgent() {
        return _agent;
    }

    /**
     * @param agent Use KnowledgeAgent or not.
     */
    public void setAgent(boolean agent) {
        if (_agentCheckbox == null) {
            _agent = agent;
        } else {
            _agentCheckbox.setSelection(agent);
        }
    }

    /**
     * @return the process variable name to be used for storing inbound message
     *         content.
     */
    public String getMessageName() {
        return nullForEmpty(_messageName);
    }

    /**
     * @param messageName The process variable name to be used for storing
     *            inbound message content.
     */
    public void setMessageName(String messageName) {
        if (_messageNameText == null) {
            _messageName = messageName;
        } else {
            _messageNameText.setText(messageName);
        }
    }

    /**
     * @return true if auditing is enabled.
     */
    public boolean isAuditingEnabled() {
        return _auditingEnabled;
    }

    /**
     * @param auditingEnabled true to enable auditing.
     */
    public void setAuditingEnabled(boolean auditingEnabled) {
        if (_auditingEnabledCheckbox == null) {
            _auditingEnabled = auditingEnabled;
        } else {
            _auditingEnabledCheckbox.setSelection(auditingEnabled);
            updateAuditControls();
        }
    }

    /**
     * @return the audit settings.
     */
    public LoggerType1 getAuditSettings() {
        return _auditSettings;
    }

    /**
     * @param auditSettings the new audit settings
     */
    public void setAuditSettings(LoggerType1 auditSettings) {
        if (_auditingEnabledCheckbox == null) {
            _auditSettings = auditSettings;
        } else {
            _auditLogText.setText(emptyForNull(auditSettings.getLog()));
            _auditIntervalText.setText(auditSettings.getInterval() == null ? "" //$NON-NLS-1$
                    : auditSettings.getInterval().toString());
            _auditTypeList.setSelection(new StructuredSelection(auditSettings.getType()), true);
        }
    }

    /**
     * Update the default values based on the setting in the file page.
     * 
     * @param project the currently targeted Java project.
     */
    public void update(IJavaProject project) {
        final String newPackageName;
        if (project == null) {
            newPackageName = ""; //$NON-NLS-1$
        } else {
            IJavaElement element = JavaUtil.getInitialPackageForProject(project);
            if (element.getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
                newPackageName = ((IPackageFragment) element).getElementName();
            } else {
                newPackageName = ""; //$NON-NLS-1$
            }
        }
        if (updateDefault(_oldPackageName, newPackageName, _packageNameText.getText())) {
            setPackageName(newPackageName);
        }
        _oldPackageName = newPackageName;
    }

    private boolean updateDefault(String oldValue, String newValue, String currentValue) {
        return !currentValue.equals(newValue) && (oldValue == null || oldValue.length() == 0
                || currentValue.length() == 0 || oldValue.equals(currentValue));
    }

    private String emptyForNull(String string) {
        return string == null ? "" : string; //$NON-NLS-1$
    }

    private String nullForEmpty(String string) {
        return string == null ? null : string.length() == 0 ? null : string;
    }

    private void initControls() {
        setAuditSettings(_auditSettings == null ? RulesFactory.eINSTANCE.createLoggerType1() : _auditSettings);
        setAuditingEnabled(_auditingEnabled);
        // setMessageName(emptyForNull(_messageName));
        setPackageName(emptyForNull(_packageName));
    }

    private void validate() {
        setErrorMessage(null);
        // TODO: we probably need to verify the content as well
        if (isAuditingEnabled()) {
            final String intervalText = _auditIntervalText.getText();
            if (intervalText.length() != 0) {
                try {
                    Integer.parseInt(intervalText);
                } catch (NumberFormatException e) {
                    setErrorMessage(e.getLocalizedMessage());
                }
            }
        }
        setPageComplete(getErrorMessage() == null);
    }

    private void updateAuditControls() {
        _auditIntervalText.setEnabled(_auditingEnabled);
        _auditLogText.setEnabled(_auditingEnabled);
        _auditTypeList.getControl().setEnabled(_auditingEnabled);
    }
}