com.liferay.ide.hook.ui.wizard.CustomJSPsTableWizardSection.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.ide.hook.ui.wizard.CustomJSPsTableWizardSection.java

Source

/*******************************************************************************
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 *
 *******************************************************************************/

package com.liferay.ide.hook.ui.wizard;

import com.liferay.ide.core.util.FileListing;
import com.liferay.ide.project.ui.wizard.StringArrayTableWizardSection;
import com.liferay.ide.ui.wizard.ExternalFileSelectionDialog;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.window.Window;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;

/**
 * @author Greg Amerson
 */
public class CustomJSPsTableWizardSection extends StringArrayTableWizardSection {

    protected static class JSPFileViewerFilter extends ViewerFilter {
        protected File base;

        protected List<File> cachedDirs = new ArrayList<File>();

        protected String[] roots = null;

        protected IPath[] validRoots;

        public JSPFileViewerFilter(File base, String[] roots) {
            this.base = base;

            this.roots = roots;

            this.validRoots = new IPath[roots.length];

            for (int i = 0; i < roots.length; i++) {
                File fileRoot = new File(base, roots[i]);

                if (fileRoot.exists()) {
                    validRoots[i] = new Path(fileRoot.getPath());
                }
            }
        }

        @Override
        public boolean select(Viewer viewer, Object parent, Object element) {
            if (element instanceof File) {
                File file = (File) element;

                IPath filePath = new Path(file.getPath());

                boolean validRootFound = false;

                for (IPath validRoot : validRoots) {
                    if (validRoot.isPrefixOf(filePath)) {
                        validRootFound = true;

                        break;
                    }
                }

                if (!validRootFound) {
                    return false;
                }

                if (cachedDirs.contains(file)) {
                    return true;
                } else if (file.isDirectory()) {
                    // we only want to show the directory if it had children
                    // that have jsps
                    if (directoryContainsFiles(file, "jsp", viewer)) //$NON-NLS-1$
                    {
                        cachedDirs.add(file);

                        return true;
                    }
                } else {
                    if (filePath.getFileExtension().contains("jsp")) //$NON-NLS-1$
                    {
                        return true;
                    }
                }
            }

            return false;
        }

        protected boolean directoryContainsFiles(File dir, String ext, Viewer viewer) {
            try {
                List<File> files = FileListing.getFileListing(dir);

                for (File file : files) {
                    IPath filePath = new Path(file.getPath());

                    if (filePath.getFileExtension() != null && filePath.getFileExtension().contains(ext)) {
                        return true;
                    }
                }
            } catch (FileNotFoundException e) {
                // do nothing
            }

            return false;
        }

    }

    protected Button addFromPortalButton;

    protected File portalDir;

    public CustomJSPsTableWizardSection(Composite parent, String componentLabel, String dialogTitle,
            String addButtonLabel, String editButtonLabel, String removeButtonLabel, String[] columnTitles,
            String[] fieldLabels, Image labelProviderImage, IDataModel model, String propertyName) {

        super(parent, componentLabel, dialogTitle, addButtonLabel, editButtonLabel, removeButtonLabel, columnTitles,
                fieldLabels, labelProviderImage, model, propertyName);
    }

    public void setPortalDir(File dir) {
        this.portalDir = dir;
    }

    @Override
    protected void addButtonsToButtonComposite(Composite buttonCompo, String addButtonLabel, String editButtonLabel,
            String removeButtonLabel) {

        addFromPortalButton = new Button(buttonCompo, SWT.PUSH);
        addFromPortalButton.setText(Msgs.addFromLiferay);
        addFromPortalButton
                .setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_FILL));
        addFromPortalButton.addSelectionListener(new SelectionListener() {

            public void widgetDefaultSelected(SelectionEvent event) {
                // Do nothing
            }

            public void widgetSelected(SelectionEvent event) {
                handleAddFromPortalButtonSelected();
            }
        });

        super.addButtonsToButtonComposite(buttonCompo, addButtonLabel, editButtonLabel, removeButtonLabel);
    }

    protected void handleAddFromPortalButtonSelected() {
        if (portalDir == null || !portalDir.exists()) {
            MessageDialog.openWarning(getShell(), Msgs.addJSP, Msgs.couldNotFindPortalRoot);

            return;
        }

        IPath rootPath = new Path(portalDir.getPath());

        ExternalFileSelectionDialog dialog = new ExternalFileSelectionDialog(getShell(),
                new JSPFileViewerFilter(portalDir, new String[] { "html" }), true, false); //$NON-NLS-1$
        dialog.setTitle(Msgs.liferayCustomJSP);
        dialog.setMessage(Msgs.selectJSPToCustomize);
        dialog.setInput(portalDir);

        if (dialog.open() == Window.OK) {
            Object[] selected = dialog.getResult();

            for (int i = 0; i < selected.length; i++) {
                IPath filePath = Path.fromOSString(((File) selected[i]).getPath());

                addStringArray(new String[] { "/" + filePath.makeRelativeTo(rootPath).toPortableString() }); //$NON-NLS-1$
            }
        }
    }

    private static class Msgs extends NLS {
        public static String addFromLiferay;
        public static String addJSP;
        public static String couldNotFindPortalRoot;
        public static String liferayCustomJSP;
        public static String selectJSPToCustomize;

        static {
            initializeMessages(CustomJSPsTableWizardSection.class.getName(), Msgs.class);
        }
    }
}