de.jcup.egradle.eclipse.ide.wizards.EGradleNewProjectWizardTemplateDetailsPage.java Source code

Java tutorial

Introduction

Here is the source code for de.jcup.egradle.eclipse.ide.wizards.EGradleNewProjectWizardTemplateDetailsPage.java

Source

/*
 * Copyright 2016 Albert Tregnaghi
 *
 * 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 de.jcup.egradle.eclipse.ide.wizards;

import static de.jcup.egradle.eclipse.ui.SWTUtil.*;

import org.eclipse.jface.dialogs.Dialog;
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.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 de.jcup.egradle.eclipse.ide.IDEUtil;
import de.jcup.egradle.eclipse.ui.SWTFactory;
import de.jcup.egradle.ide.NewProjectContext;
import de.jcup.egradle.ide.NewProjectTemplateVariables;
import de.jcup.egradle.template.FileStructureTemplate;

public class EGradleNewProjectWizardTemplateDetailsPage extends WizardPage {

    private NewProjectContext context;
    private Group multiProjectGroup;
    private Composite composite;
    private Text multiProjectNamesText;
    private Group javaGroup;
    private Text javaSourceCompatibilityText;
    private Text javaHomeText;
    private Group commonGroup;
    private Text gradleGroupNameText;
    private Text gradleVersionText;
    private Button gradleWrapperEnabledRadioButton;
    private Label gradleVersionLabel;

    public EGradleNewProjectWizardTemplateDetailsPage(NewProjectContext context) {
        super("templateDetails");
        this.context = context;
        setTitle("Gradle template details");
        setImageDescriptor(IDEUtil.createImageDescriptor("icons/egradle-banner_64x64.png"));
        setDescription("Setup details of used template");
    }

    @Override
    public void createControl(Composite parent) {
        composite = SWTFactory.createComposite(parent, 1, SWT.FILL, SWT.FILL);

        initializeDialogUnits(parent);

        composite.setLayoutData(new GridData(GridData.FILL_BOTH));

        initCommonParts(composite);
        initMultiProjectParts(composite);
        initJavaParts(composite);

        // Show description on opening
        setErrorMessage(null);
        setMessage(null);
        setControl(composite);

        Dialog.applyDialogFont(composite);

        updateUI();
    }

    private void initCommonParts(Composite composite) {
        commonGroup = SWTFactory.createGroup(composite, "Common", 1, SWT.FILL, SWT.FILL);
        commonGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        SWTFactory.createLabel(commonGroup, "Please enter group name", SWT.FILL);
        gradleGroupNameText = SWTFactory.createSingleText(commonGroup, 1);
        gradleGroupNameText.addModifyListener(new ModifyListener() {

            @Override
            public void modifyText(ModifyEvent e) {
                setPageComplete(validatePage());
            }
        });

        gradleWrapperEnabledRadioButton = SWTFactory.createCheckButton(commonGroup, "Use gradle wrapper", null,
                context.isSupportingGradleWrapper(), SWT.FILL);
        gradleWrapperEnabledRadioButton.setEnabled(context.isSupportingGradleWrapper());
        gradleWrapperEnabledRadioButton.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                context.setGradleWrapperEnabled(gradleWrapperEnabledRadioButton.getSelection());
                updateUI();
                setPageComplete(validatePage());
            }

        });

        gradleVersionLabel = SWTFactory.createLabel(commonGroup, "Gradle Version", SWT.FILL);
        gradleVersionLabel.setEnabled(context.isSupportingGradleWrapper());

        gradleVersionText = SWTFactory.createSingleText(commonGroup, 1);
        gradleVersionText.setMessage(NewProjectTemplateVariables.VAR__GRADLE__VERSION.getDefaultValue());
        gradleVersionText.addModifyListener(new ModifyListener() {

            @Override
            public void modifyText(ModifyEvent e) {
                setPageComplete(validatePage());
            }
        });
        gradleVersionText.setEnabled(context.isSupportingGradleWrapper());
    }

    private void initMultiProjectParts(Composite composite) {
        multiProjectGroup = SWTFactory.createGroup(composite, "Multi project", 1, SWT.FILL, SWT.FILL);
        multiProjectGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        SWTFactory.createLabel(multiProjectGroup, "Please enter sub project name(s). Use comma to separate",
                SWT.FILL);
        multiProjectNamesText = SWTFactory.createSingleText(multiProjectGroup, 1);

        multiProjectNamesText.addModifyListener(new ModifyListener() {

            @Override
            public void modifyText(ModifyEvent e) {
                setPageComplete(validatePage());
            }
        });

    }

    private void initJavaParts(Composite composite) {
        javaGroup = SWTFactory.createGroup(composite, "Java", 1, SWT.FILL, SWT.FILL);
        javaGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        SWTFactory.createLabel(javaGroup, "Please enter source compatibility level", SWT.FILL);
        javaSourceCompatibilityText = SWTFactory.createSingleText(javaGroup, 1);
        javaSourceCompatibilityText.setText("1.8");
        javaSourceCompatibilityText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                setPageComplete(validatePage());
            }
        });

        SWTFactory.createLabel(javaGroup, "JAVA_HOME for gradle (optional)", SWT.FILL);
        javaHomeText = SWTFactory.createSingleText(javaGroup, 1);
        javaHomeText.setText(IDEUtil.getPreferences().getGlobalJavaHomePath());
        javaHomeText.addModifyListener(new ModifyListener() {

            @Override
            public void modifyText(ModifyEvent e) {
                setPageComplete(validatePage());
            }
        });

    }

    private boolean validatePage() {
        FileStructureTemplate selectedTemplate = context.getSelectedTemplate();
        if (selectedTemplate == null) {
            return false;
        }
        /*
         * set context with current values - no matter if valid or not, or
         * feature is enabled.
         */
        String groupName = gradleGroupNameText.getText();
        String gradleVersion = gradleVersionText.getText();
        String multiProjects = multiProjectNamesText.getText();
        String javaSourceCompatibility = javaSourceCompatibilityText.getText();
        String javaHome = javaHomeText.getText();

        context.setJavaHome(javaHome);
        context.setGradleVersion(gradleVersion);
        context.setGroupName(groupName);
        context.setMultiProjects(multiProjects);
        context.setJavaSourceCompatibility(javaSourceCompatibility);

        if (!context.validateMultiProject()) {
            return false;
        }
        if (!context.validateJavaSupport()) {
            return false;
        }
        return true;
    }

    @Override
    public void setVisible(boolean visible) {
        super.setVisible(visible);
        if (visible) {
            /* only when become visible again do the ui update */
            updateUI();
        }
    }

    private void updateUI() {
        FileStructureTemplate selectedTemplate = context.getSelectedTemplate();
        if (selectedTemplate == null) {
            composite.setVisible(false);
            setDescription("No template selected");
            return;
        }
        composite.setVisible(true);
        setDescription("Define details for template '" + selectedTemplate.getName() + "'");

        showControl(gradleWrapperEnabledRadioButton, context.isSupportingGradleWrapper());
        showControl(gradleVersionLabel, context.isGradleWrapperSupportedAndEnabled());
        showControl(gradleVersionText, context.isGradleWrapperSupportedAndEnabled());

        showControl(multiProjectGroup, context.isMultiProject());
        showControl(javaGroup, context.isSupportingJava());
        setPageComplete(validatePage());
        // Use message to show default value, will always return when user
        // user has no content there. The "" is to ensure message can never be
        // null...
        gradleGroupNameText.setMessage("" + context.getProjectName());
    }

}