org.eclipse.birt.report.designer.internal.ui.wizards.WizardCSSSettingPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.birt.report.designer.internal.ui.wizards.WizardCSSSettingPage.java

Source

/*******************************************************************************
 * Copyright (c) 2007 Actuate Corporation.
 * 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:
 *  Actuate Corporation  - initial API and implementation
 *******************************************************************************/

package org.eclipse.birt.report.designer.internal.ui.wizards;

import java.io.File;

import org.eclipse.birt.report.designer.internal.ui.dialogs.resource.ResourceFileFolderSelectionDialog;
import org.eclipse.birt.report.designer.internal.ui.resourcelocator.ResourceEntry;
import org.eclipse.birt.report.designer.internal.ui.util.ExceptionHandler;
import org.eclipse.birt.report.designer.internal.ui.util.IHelpContextIds;
import org.eclipse.birt.report.designer.internal.ui.util.UIUtil;
import org.eclipse.birt.report.designer.nls.Messages;
import org.eclipse.birt.report.designer.ui.ReportPlugin;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.wizard.IWizardPage;
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.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ISelectionStatusValidator;

/**
 * 
 */

public class WizardCSSSettingPage extends WizardPage {

    String CSS_FILE_EXTENSIONS[] = new String[] { "*.css;*.CSS" }; //$NON-NLS-1$
    String CSS_FILE_END[] = new String[] { "css", "CSS" }; //$NON-NLS-1$ //$NON-NLS-2$
    private static String LABEL_FILE_NAME = Messages.getString("PublishCSSDialog.Label.FileName"); //$NON-NLS-1$

    private static String LABEL_SOURCE_FILE_NAME = Messages.getString("PublishCSSDialog.Label.SourceFileName"); //$NON-NLS-1$

    private static String LABEL_FOLDER = Messages.getString("PublishCSSDialog.Label.Folder"); //$NON-NLS-1$

    private static String BUTTON_BROWSE = Messages.getString("PublishCSSDialog.Label.Browse"); //$NON-NLS-1$
    private static String BUTTON_BROWSE2 = Messages.getString("PublishCSSDialog.Label.Browse2"); //$NON-NLS-1$

    private static final String PLUGIN_ID = "org.eclipse.birt.report.designer.ui.actions.AddCSSFileAction"; //$NON-NLS-1$

    private String fileDialogTitle = Messages.getString("PublishCSSDialog.Dialog.FileSeclect.Tilte"); //$NON-NLS-1$

    private File selectedFolder;

    private Status pageStatus;

    private String fileName;
    private String folder;

    private Text nameText;
    private Text folderText;
    private Text sourceFileText;

    private Status OKStatus = new Status(IStatus.OK, ReportPlugin.REPORT_UI, IStatus.OK, "", null); //$NON-NLS-1$
    private Status ErrorStatus = new Status(IStatus.ERROR, ReportPlugin.REPORT_UI, IStatus.ERROR,
            Messages.getString("WPublishCSSDialog.ErrorMessage.SelectFolder"), //$NON-NLS-1$
            null);

    private String pageDefaultDesc;

    //   private CSSHandle handle;
    //
    //   public void setType(CSSHandle handle)
    //   {
    //      this.handle = handle;
    //   }

    public String getSourceFileName() {
        if (sourceFileText != null
        //            && handle == null 
        ) {
            return sourceFileText.getText();
        }

        return null;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public void setfolderName(String folder) {
        this.folder = folder;
    }

    public String getFolder() {
        folder = folderText.getText();
        return folder;
    }

    public String getFileName() {
        fileName = nameText.getText();
        return fileName;
    }

    //   /**
    //    * @param pageName
    //    */
    //   public WizardCSSSettingPage(String pageTitle,
    //         String pageDesc, CSSHandle handle  )
    //   {
    //      super( "" );
    //      pageStatus = new Status( IStatus.OK, PLUGIN_ID, 0, pageDesc, null );
    //      this.handle = handle;
    //   }

    /**
     * @param pageName
     */
    public WizardCSSSettingPage(String pageTitle, String pageDesc) {
        super(""); //$NON-NLS-1$
        setTitle(pageTitle);
        setMessage(pageDesc);
        pageStatus = new Status(IStatus.OK, PLUGIN_ID, 0, pageDesc, null);
        this.pageDefaultDesc = pageDesc;
    }

    /**
     * @param pageName
     * @param title
     * @param titleImage
     */
    public WizardCSSSettingPage(String pageName, String title, ImageDescriptor titleImage) {
        super(pageName, title, titleImage);
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
     */
    public void createControl(Composite parent) {

        //      if(handle == null)
        //      {
        UIUtil.bindHelp(parent, IHelpContextIds.ADD_CSS_DIALOG_ID);
        //      }else
        //      {
        //         UIUtil.bindHelp( parent, IHelpContextIds.PUBLISH_CSS_WIZARD_ID );
        //      }

        Composite container = new Composite(parent, SWT.NONE);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.widthHint = 250;
        gd.heightHint = 350;
        container.setLayoutData(gd);
        GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns = 3;
        container.setLayout(gridLayout);

        //      if ( handle == null )
        {
            new Label(container, SWT.NONE).setText(LABEL_SOURCE_FILE_NAME);
            int style = SWT.BORDER | SWT.SINGLE;
            sourceFileText = createText(container, 1, style);
            sourceFileText.addModifyListener(new ModifyListener() {

                public void modifyText(ModifyEvent e) {
                    checkStatus();
                }
            });

            Button chooseBtn = new Button(container, SWT.NONE);
            chooseBtn.setText(BUTTON_BROWSE2);
            chooseBtn.addSelectionListener(new SelectionListener() {

                public void widgetSelected(SelectionEvent e) {
                    String sourceFileName = getFilePath();
                    if (sourceFileName != null) {
                        sourceFileText.setText(sourceFileName);
                        nameText.setText(sourceFileName.substring(sourceFileName.lastIndexOf(File.separator) + 1));
                        nameText.setFocus();
                    }
                }

                public void widgetDefaultSelected(SelectionEvent e) {

                }
            });

        }

        new Label(container, SWT.NONE).setText(LABEL_FILE_NAME);
        int style = SWT.BORDER | SWT.SINGLE;
        nameText = createText(container, 1, style);
        new Label(container, SWT.NONE);
        if (fileName != null) {
            nameText.setText(fileName);
        }

        nameText.addModifyListener(new ModifyListener() {

            public void modifyText(ModifyEvent e) {
                checkStatus();
            }
        });

        new Label(container, SWT.NONE).setText(LABEL_FOLDER);
        style = SWT.BORDER | SWT.SINGLE | SWT.READ_ONLY;
        folderText = createText(container, 1, style);
        if (folder != null) {
            folderText.setText(folder);
        }
        folderText.addModifyListener(new ModifyListener() {

            public void modifyText(ModifyEvent e) {
                checkStatus();
            }
        });

        Button chooseBtn = new Button(container, SWT.NONE);
        chooseBtn.setText(BUTTON_BROWSE);
        chooseBtn.addSelectionListener(new SelectionListener() {

            public void widgetSelected(SelectionEvent e) {

                ResourceFileFolderSelectionDialog dialog = new ResourceFileFolderSelectionDialog(false);

                dialog.setAllowMultiple(false);
                dialog.setTitle(Messages.getString("WizardCSSSettingPage.Resourcefile.Dialog.Title")); //$NON-NLS-1$
                dialog.setMessage(Messages.getString("WizardCSSSettingPage.Resourcefile.Dialog.Message")); //$NON-NLS-1$

                dialog.setValidator(new Validator());

                if (dialog.open() == dialog.OK) {
                    Object[] selected = dialog.getResult();
                    if (selected.length > 0) {
                        ResourceEntry file = (ResourceEntry) selected[0];
                        folderText.setText(new File(file.getURL().getPath()).getAbsolutePath());
                    }

                }
            }

            public void widgetDefaultSelected(SelectionEvent e) {

            }
        });

        nameText.forceFocus();
        setControl(container);

    }

    public void checkStatus() {
        // Initialize a variable with the no error status
        Status status = null;
        //      if ( handle == null )
        //      {
        status = new Status(IStatus.OK, PLUGIN_ID, 0, pageDefaultDesc, null);
        //      }
        //      else
        //      {
        //         status = new Status( IStatus.OK, PLUGIN_ID, 0, PAGE_DESC, null );
        //      }

        if ( // handle == null && 
        isTextEmpty(sourceFileText)) {
            status = new Status(IStatus.ERROR, PLUGIN_ID, 0,
                    Messages.getString("PublishCSSDialog.Message.SourceFileEmpty"), //$NON-NLS-1$
                    null);
        } else if ( // handle == null && 
        (new File(sourceFileText.getText()).isDirectory() || !new File(sourceFileText.getText()).exists())) {
            status = new Status(IStatus.ERROR, PLUGIN_ID, 0,
                    Messages.getFormattedString("PublishCSSDialog.Error.FileNotFound", //$NON-NLS-1$
                            new String[] { sourceFileText.getText() }), null);
        } else if (isTextEmpty(nameText)) {
            status = new Status(IStatus.ERROR, PLUGIN_ID, 0,
                    Messages.getString("PublishCSSDialog.Message.FileNameEmpty"), //$NON-NLS-1$
                    null);
        } else if (!isCSSFile(nameText.getText())) {
            status = new Status(IStatus.ERROR, PLUGIN_ID, 0,
                    Messages.getString("PublishCSSDialog.Message.FileNameError"), //$NON-NLS-1$
                    null);
        } else if (isTextEmpty(folderText)) {
            status = new Status(IStatus.ERROR, PLUGIN_ID, 0,
                    Messages.getString("PublishCSSDialog.Message.FolderEmpty"), //$NON-NLS-1$
                    null);
        }

        pageStatus = status;

        // Show the most serious error
        applyToStatusLine(pageStatus);
        getWizard().getContainer().updateButtons();

    }

    /**
     * Applies the status to the status line of a dialog page.
     */
    private void applyToStatusLine(IStatus status) {
        String message = status.getMessage();
        if (message.length() == 0)
            message = pageDefaultDesc;
        switch (status.getSeverity()) {
        case IStatus.OK:
            setErrorMessage(null);
            setMessage(message);
            break;
        case IStatus.ERROR:
            setErrorMessage(message);
            setMessage(message, IMessageProvider.ERROR);
            break;
        default:
            setErrorMessage(message);
            setMessage(null);
            break;
        }
    }

    private static boolean isTextEmpty(Text text) {
        String s = text.getText();
        if ((s != null) && (s.trim().length() > 0))
            return false;
        return true;
    }

    private Text createText(Composite container, int column, int style) {
        Text text;
        GridData gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
        gridData.horizontalSpan = column;

        text = new Text(container, style);
        text.setLayoutData(gridData);
        return text;
    }

    /**
     * @see IWizardPage#canFinish()
     */
    public boolean canFinish() {
        return ((!isTextEmpty(nameText)) && (!isTextEmpty(folderText)) && pageStatus.isOK());
    }

    private class Validator implements ISelectionStatusValidator {

        public IStatus validate(Object[] selection) {
            int nSelected = selection.length;
            if (nSelected == 0 || nSelected > 1) {
                return ErrorStatus;
            }
            return OKStatus;
        }
    }

    private boolean isFileExists(String filePath) {
        String fileName = filePath.substring(filePath.lastIndexOf(File.separator) + 1);
        try {
            return new File(selectedFolder, fileName).exists();
        } catch (Exception e) {
        }
        return false;
    }

    private String getFilePath() {
        FileDialog dialog = new FileDialog(PlatformUI.getWorkbench().getDisplay().getActiveShell());
        dialog.setFilterExtensions(CSS_FILE_EXTENSIONS);
        dialog.setText(fileDialogTitle);
        String fileName = dialog.open();
        if (fileName != null) {
            if (!(new File(fileName).exists())) {
                ExceptionHandler.openErrorMessageBox(Messages.getString("PublishCSSDialog.Exception.Error.Title"), //$NON-NLS-1$
                        Messages.getFormattedString("PublishCSSDialog.Error.FileNotFound", //$NON-NLS-1$
                                new String[] { fileName }));
                return getFilePath();
            }

            if (!(isCSSFile(fileName))) {
                ExceptionHandler.openErrorMessageBox(Messages.getString("PublishCSSDialog.Exception.Error.Title"), //$NON-NLS-1$
                        Messages.getFormattedString("PublishCSSDialog.Error.FileIsNotCSSFile", //$NON-NLS-1$
                                new String[] { fileName, CSS_FILE_END[0] }));
                return getFilePath();
            }

            if (isFileExists(fileName)) {
                ExceptionHandler.openErrorMessageBox(Messages.getString("PublishCSSDialog.Exception.Error.Title"), //$NON-NLS-1$
                        Messages.getString("PublishCSSDialog.Error.FileExist")); //$NON-NLS-1$
                return getFilePath();
            }

            return fileName;
        } else {
            return null;
        }
    }

    private boolean isCSSFile(String fileName) {
        assert (fileName != null);
        for (int i = 0; i < CSS_FILE_END.length; i++) {
            if (fileName.endsWith(CSS_FILE_END[i])) {
                return true;
            }
        }
        return false;
    }

}