Package org.carrot2.workbench.core.ui

Source Code of org.carrot2.workbench.core.ui.SearchEditorSaveAsDialog

/*
* Carrot2 project.
*
* Copyright (C) 2002-2014, Dawid Weiss, Stanisław Osiński.
* All rights reserved.
*
* Refer to the full license file "carrot2.LICENSE"
* in the root folder of the repository checkout or at:
* http://www.carrot2.org/carrot2.LICENSE
*/

package org.carrot2.workbench.core.ui;

import static org.apache.commons.lang.StringUtils.isBlank;
import static org.eclipse.swt.SWT.Modify;
import static org.eclipse.swt.SWT.Selection;

import java.io.File;

import org.carrot2.workbench.core.ui.SearchEditor.SaveOptions;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TrayDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;

/**
* Displays a dialog prompting for the location of the output XML file and options
* indicating what to save (clusters, documents or both).
*/
final class SearchEditorSaveAsDialog extends TrayDialog
{
    private Text fileNameText;
    private Button browseButton;

    private Button clusterOption;
    private Button docOption;
    private Button attributesOption;

    /**
     * Save options (from the editor).
     */
    public SaveOptions editorOptions;

    /*
     *
     */
    public SearchEditorSaveAsDialog(Shell parentShell, SearchEditor.SaveOptions options)
    {
        super(parentShell);
        this.editorOptions = options;
    }

    @Override
    protected void configureShell(Shell newShell)
    {
        super.configureShell(newShell);
        newShell.setText("Save as XML");
        newShell.addShellListener(new ShellAdapter()
        {
            @Override
            public void shellActivated(ShellEvent e)
            {
                validateInput();
            }
        });
    }

    @Override
    protected void okPressed()
    {
        final File f = new File(this.fileNameText.getText());
        editorOptions.directory = f.getParent();
        editorOptions.fileName = f.getName();
        editorOptions.includeClusters = clusterOption.getSelection();
        editorOptions.includeDocuments = docOption.getSelection();
        editorOptions.includeAttributes = attributesOption.getSelection();

        editorOptions.saveGlobal();
        super.okPressed();
    }

    /*
     *
     */
    @Override
    protected Control createDialogArea(Composite parent)
    {
        final Composite root = (Composite) super.createDialogArea(parent);
        createControls(root);

        final Path fullPath = new Path(editorOptions.getFullPath());
        fileNameText.setText(fullPath.toOSString());
        browseButton.addListener(Selection, new Listener()
        {
            public void handleEvent(Event event)
            {
                Path newPath = FileDialogs.openSaveXML(fullPath);
                if (newPath != null)
                {
                    fileNameText.setText(newPath.toOSString());
                }
            }
        });

        final Listener correctnessChecker = new Listener()
        {
            public void handleEvent(Event event)
            {
                validateInput();
            }
        };
       
        docOption.addListener(Selection, correctnessChecker);
        clusterOption.addListener(Selection, correctnessChecker);
        fileNameText.addListener(Modify, correctnessChecker);
        return root;
    }

    /*
     *
     */
    private void validateInput()
    {
        boolean invalid = false;

        invalid |= (docOption.getSelection() == false && clusterOption.getSelection() == false);

        if (isBlank(fileNameText.getText()))
        {
            invalid = true;
        }
        else
        {
            invalid |= (!new File(fileNameText.getText()).getAbsoluteFile()
                .getParentFile().isDirectory());
        }

        getButton(IDialogConstants.OK_ID).setEnabled(!invalid);
    }

    /*
     *
     */
    private void createControls(Composite root)
    {
        final GridLayout parentLayout = (GridLayout) root.getLayout();

        parentLayout.numColumns = 3;

        root.setLayout(parentLayout);
        {
            Label fileNameLabel = new Label(root, SWT.NONE);
            fileNameLabel.setText("Location:");
        }
        {
            GridData fileNameTextLData = new GridData();
            fileNameTextLData.horizontalAlignment = GridData.FILL;
            fileNameTextLData.grabExcessHorizontalSpace = true;
            fileNameTextLData.verticalAlignment = GridData.FILL;
            fileNameTextLData.horizontalIndent = 5;
            fileNameTextLData.minimumWidth = 280;
            fileNameTextLData.widthHint = 280;
            fileNameText = new Text(root, SWT.BORDER);
            fileNameText.setLayoutData(fileNameTextLData);
        }
        {
            browseButton = new Button(root, SWT.NONE);
            GridData dialogButtonLData = new GridData();
            dialogButtonLData.horizontalAlignment = GridData.FILL;
            dialogButtonLData.verticalAlignment = GridData.FILL;
            browseButton.setText("Browse...");
            dialogButtonLData.widthHint = browseButton.computeSize(SWT.DEFAULT,
                SWT.DEFAULT).x
                + 2 * IDialogConstants.BUTTON_MARGIN;
            browseButton.setLayoutData(dialogButtonLData);
        }
       
        docOption = createCheckbox(root, "Include documents", editorOptions.includeDocuments);
        clusterOption = createCheckbox(root, "Include clusters", editorOptions.includeClusters);
        attributesOption = createCheckbox(root, "Include other attributes", editorOptions.includeAttributes);
    }

    private Button createCheckbox(Composite root, final String label, final Boolean checked)
    {
        new Label(root, SWT.NONE).setVisible(false);
       
        final Button checkbox = new Button(root, SWT.CHECK | SWT.LEFT);
        final GridData checkboxLData = new GridData();
        checkboxLData.horizontalIndent = 5;
        checkboxLData.horizontalSpan = 2;
        checkbox.setLayoutData(checkboxLData);
        checkbox.setText(label);
        checkbox.setSelection(checked);
       
        return checkbox;
    }
}
TOP

Related Classes of org.carrot2.workbench.core.ui.SearchEditorSaveAsDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.