com.liferay.ide.server.tomcat.ui.wizard.LiferayTomcatRuntimeOptionalComposite.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.ide.server.tomcat.ui.wizard.LiferayTomcatRuntimeOptionalComposite.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.server.tomcat.ui.wizard;

import static com.liferay.ide.core.util.CoreUtil.empty;

import com.liferay.ide.core.util.StringPool;
import com.liferay.ide.server.tomcat.core.ILiferayTomcatRuntime;
import com.liferay.ide.server.tomcat.core.util.LiferayTomcatUtil;
import com.liferay.ide.server.ui.LiferayServerUI;
import com.liferay.ide.ui.util.SWTUtil;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jst.server.core.IJavaRuntime;
import org.eclipse.jst.server.tomcat.core.internal.ITomcatRuntimeWorkingCopy;
import org.eclipse.jst.server.tomcat.ui.internal.TomcatRuntimeComposite;
import org.eclipse.osgi.util.NLS;
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.DirectoryDialog;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Layout;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
import org.eclipse.wst.server.ui.wizard.IWizardHandle;

/**
 * @author Greg Amerson
 */
@SuppressWarnings({ "restriction" })
public class LiferayTomcatRuntimeOptionalComposite extends TomcatRuntimeComposite implements ModifyListener {

    public static void setFieldValue(Text field, String value) {
        if (field != null && !field.isDisposed()) {
            field.setText(value != null ? value : StringPool.EMPTY);
        }
    }

    protected boolean ignoreModifyEvent;
    private Text javadocField;
    private Text sourceField;

    public LiferayTomcatRuntimeOptionalComposite(Composite parent, IWizardHandle wizard) {
        super(parent, wizard);

        wizard.setTitle(Msgs.liferayRuntimeTomcatBundle);
        wizard.setDescription(Msgs.specifyExtraSettings);
        wizard.setImageDescriptor(LiferayServerUI.getImageDescriptor(LiferayServerUI.IMG_WIZ_RUNTIME));
    }

    protected Button createButton(String text, int style) {
        Button button = new Button(this, style);
        button.setText(text);

        GridDataFactory.generate(button, 2, 1);

        return button;
    }

    @Override
    protected void createControl() {
        setLayout(createLayout());
        setLayoutData(new GridData(GridData.FILL_BOTH));

        this.javadocField = createJavadocField(this);
        this.javadocField.addModifyListener(this);

        this.sourceField = createSourceField(this);
        this.sourceField.addModifyListener(this);

        init();

        validate();

        Dialog.applyDialogFont(this);
    }

    public static Text createJavadocField(final Composite parent) {
        final Text javadocField = createTextField(parent, Msgs.liferayJavadocURL);

        SWTUtil.createButton(parent, Msgs.browseZip).addSelectionListener(new SelectionAdapter() {

            public void widgetSelected(SelectionEvent e) {
                FileDialog fd = new FileDialog(parent.getShell());

                fd.setText(Msgs.selectLiferayJavadocZipFile);

                String selectedFile = fd.open();

                if (selectedFile != null) {
                    String javadocZipURL = getJavadocZipURL(selectedFile);

                    if (javadocZipURL != null) {
                        javadocField.setText(javadocZipURL);
                    } else {
                        MessageDialog.openInformation(parent.getShell(), Msgs.liferayTomcatRuntime,
                                Msgs.fileNotValid);
                    }
                }
            }
        });

        SWTUtil.createLabel(parent, StringPool.EMPTY, 1);

        SWTUtil.createButton(parent, Msgs.browseDirectory).addSelectionListener(new SelectionAdapter() {

            public void widgetSelected(SelectionEvent e) {
                DirectoryDialog dd = new DirectoryDialog(parent.getShell());

                dd.setText(Msgs.selectLiferayJavadocDirectory);
                dd.setFilterPath(javadocField.getText());

                String selectedFile = dd.open();

                if (selectedFile != null) {
                    String javadocDirectoryURL = getJavadocDirectoryURL(selectedFile);

                    if (javadocDirectoryURL != null) {
                        javadocField.setText(javadocDirectoryURL);
                    } else {
                        MessageDialog.openInformation(parent.getShell(), Msgs.liferayTomcatRuntime,
                                Msgs.directoryNotValid);
                    }
                }
            }
        });

        return javadocField;
    }

    public static Text createSourceField(final Composite parent) {
        final Text sourceField = createTextField(parent, Msgs.liferaysourceLocation);

        SWTUtil.createButton(parent, Msgs.browseZip).addSelectionListener(new SelectionAdapter() {

            public void widgetSelected(SelectionEvent e) {
                FileDialog fd = new FileDialog(parent.getShell());

                fd.setText(Msgs.selectLiferaySourceZipFile);

                String selectedFile = fd.open();

                if (selectedFile != null && new File(selectedFile).exists()) {
                    sourceField.setText(selectedFile);
                }
            }
        });

        SWTUtil.createLabel(parent, StringPool.EMPTY, 1);

        SWTUtil.createButton(parent, Msgs.browseDirectory).addSelectionListener(new SelectionAdapter() {

            public void widgetSelected(SelectionEvent e) {
                DirectoryDialog dd = new DirectoryDialog(parent.getShell());

                dd.setText(Msgs.selectLiferaySourceDirectory);
                dd.setFilterPath(sourceField.getText());

                String selectedFile = dd.open();

                if (selectedFile != null && new File(selectedFile).exists()) {
                    sourceField.setText(selectedFile);
                }
            }
        });

        return sourceField;
    }

    protected static Label createLabel(Composite parent, String text) {
        Label label = new Label(parent, SWT.NONE);
        label.setText(text);

        GridDataFactory.generate(label, 2, 1);

        return label;
    }

    protected Layout createLayout() {
        GridLayout layout = new GridLayout(2, false);
        return layout;
    }

    protected void createSpacer() {
        new Label(this, SWT.NONE);
    }

    protected static Text createTextField(Composite parent, String labelText) {
        createLabel(parent, labelText);

        Text text = new Text(parent, SWT.BORDER);
        text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        return text;
    }

    protected static String getJavadocDirectoryURL(String selectedFile) {
        String retval = null;

        File javadocDirectory = new File(selectedFile);

        if (javadocDirectory.exists() && javadocDirectory.isDirectory()) {
            // check one layer down
            File[] files = javadocDirectory.listFiles();

            if (!empty(files)) {
                for (File nestedFile : files) {
                    if (nestedFile.getName().equals("javadocs")) //$NON-NLS-1$
                    {
                        javadocDirectory = nestedFile;
                    }
                }

                for (File nestedFile : files) {
                    if (nestedFile.getName().equals("javadocs-all")) //$NON-NLS-1$
                    {
                        javadocDirectory = nestedFile;
                    }
                }

                File liferayDir = new File(javadocDirectory, "com/liferay"); //$NON-NLS-1$

                if (liferayDir.exists()) {
                    try {
                        retval = javadocDirectory.toURI().toURL().toExternalForm();
                    } catch (MalformedURLException e) {
                    }
                }
            }
        }

        return retval;
    }

    protected static String getJavadocZipURL(String selectedFile) {
        String retval = null;

        try {
            String rootEntryName = null;
            ZipEntry javadocEntry = null;

            final File javadocFile = new File(selectedFile);
            final ZipFile zipFile = new ZipFile(javadocFile);

            Enumeration<? extends ZipEntry> zipEntries = zipFile.entries();

            ZipEntry rootEntry = zipEntries.nextElement();
            rootEntryName = new Path(rootEntry.getName()).segment(0);

            if (rootEntryName.endsWith(StringPool.FORWARD_SLASH)) {
                rootEntryName = rootEntryName.substring(0, rootEntryName.length() - 1);
            }

            ZipEntry entry = zipEntries.nextElement();

            while (entry != null && javadocEntry == null) {
                String entryName = entry.getName();

                if (entryName.startsWith(rootEntryName + "/javadocs")) //$NON-NLS-1$
                {
                    ZipEntry allEntry = new ZipEntry(rootEntryName + "/javadocs-all"); //$NON-NLS-1$

                    if (zipFile.getInputStream(allEntry) != null) {
                        javadocEntry = allEntry;
                    } else {
                        javadocEntry = entry;
                    }
                }

                entry = zipEntries.nextElement();
            }

            if (javadocEntry != null) {
                retval = "jar:" + javadocFile.toURI().toURL().toExternalForm() + "!/" + javadocEntry.getName(); //$NON-NLS-1$ //$NON-NLS-2$
            }

            zipFile.close();
        } catch (Exception e) {
            // we couldn't find value zip url for whatever reason so just return
        }

        return retval;
    }

    protected IJavaRuntime getJavaRuntime() {
        return (IJavaRuntime) this.runtime;
    }

    protected ILiferayTomcatRuntime getLiferayTomcatRuntime() {
        return LiferayTomcatUtil.getLiferayTomcatRuntime(this.runtimeWC);
    }

    protected IRuntimeWorkingCopy getRuntime() {
        return this.runtimeWC;
    }

    @Override
    protected void init() {
        if (getRuntime() == null) {
            return;
        }

        String javadocURL = getLiferayTomcatRuntime().getJavadocURL();
        setFieldValue(javadocField, javadocURL != null ? javadocURL : StringPool.EMPTY);

        IPath sourceLocation = getLiferayTomcatRuntime().getSourceLocation();
        setFieldValue(sourceField, sourceLocation != null ? sourceLocation.toOSString() : StringPool.EMPTY);
    }

    public void modifyText(ModifyEvent e) {
        if (ignoreModifyEvent) {
            ignoreModifyEvent = false;
            return;
        }

        else if (e.getSource().equals(javadocField)) {
            String newJavadocURL = null;

            // if a file directory see if we need to correct
            String javadocValue = javadocField.getText();

            try {
                URL javadocURL = new URL(javadocValue);

                if (javadocURL.getProtocol() != null && javadocURL.getProtocol().startsWith("http")) //$NON-NLS-1$
                {
                    newJavadocURL = javadocValue;
                }

                if (newJavadocURL == null) {
                    File javadocFile = new File(javadocValue);

                    if (javadocFile.isFile()) {
                        newJavadocURL = javadocFile.toURI().toURL().toExternalForm();
                    } else if (javadocFile.isDirectory()) {

                    } else {
                        newJavadocURL = javadocValue;
                    }
                }
            } catch (MalformedURLException e1) {
                newJavadocURL = javadocValue;
            }

            getLiferayTomcatRuntime().setJavadocURL(newJavadocURL);
        } else if (e.getSource().equals(sourceField)) {
            getLiferayTomcatRuntime().setSourceLocation(new Path(sourceField.getText()));
        }

        validate();
    }

    @Override
    public void setRuntime(IRuntimeWorkingCopy newRuntime) {
        if (newRuntime == null) {
            runtimeWC = null;
            runtime = null;
        } else {
            runtimeWC = newRuntime;
            runtime = (ITomcatRuntimeWorkingCopy) newRuntime.loadAdapter(ITomcatRuntimeWorkingCopy.class, null);
        }

        init();

        try {
            validate();
        } catch (NullPointerException e) {
            // ignore exception because this composite haven't been created and there are no shell
        }
    }

    private static class Msgs extends NLS {
        public static String browseDirectory;
        public static String browseZip;
        public static String directoryNotValid;
        public static String fileNotValid;
        public static String liferayJavadocURL;
        public static String liferayRuntimeTomcatBundle;
        public static String liferaysourceLocation;
        public static String liferayTomcatRuntime;
        public static String selectLiferayJavadocDirectory;
        public static String selectLiferayJavadocZipFile;
        public static String selectLiferaySourceDirectory;
        public static String selectLiferaySourceZipFile;
        public static String specifyExtraSettings;

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