net.sf.j2s.ui.launching.J2SClasspathOptionTab.java Source code

Java tutorial

Introduction

Here is the source code for net.sf.j2s.ui.launching.J2SClasspathOptionTab.java

Source

/*******************************************************************************
 * Copyright (c) 2007 java2script.org and others.
 * 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:
 *     Zhou Renjian - initial API and implementation
 *******************************************************************************/

package net.sf.j2s.ui.launching;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.util.Properties;

import net.sf.j2s.ui.classpath.IRuntimeClasspathEntry;
import net.sf.j2s.ui.property.IJ2SConfigModifiedListener;
import net.sf.j2s.ui.property.J2SConfigPage;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
import org.eclipse.jdt.core.IJavaModel;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.debug.ui.IJavaDebugHelpContextIds;
import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
import org.eclipse.jdt.internal.debug.ui.JavaDebugImages;
import org.eclipse.jdt.internal.debug.ui.launcher.LauncherMessages;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.PlatformUI;

/**
 * @author zhou renjian
 *
 * 2006-5-14
 */
public class J2SClasspathOptionTab extends AbstractLaunchConfigurationTab {

    private J2SConfigPage configPage;
    /**
     * The last launch config this tab was initialized from
     */
    protected ILaunchConfiguration fLaunchConfiguration;

    /* (non-Javadoc)
     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite)
     */
    public void createControl(Composite parent) {
        Font font = parent.getFont();

        Composite comp = new Composite(parent, SWT.NONE);
        setControl(comp);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
                IJavaDebugHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_CLASSPATH_TAB);
        GridLayout topLayout = new GridLayout();
        comp.setLayout(topLayout);
        GridData gd;

        Label label = new Label(comp, SWT.NONE);
        label.setText(LauncherMessages.JavaClasspathTab_0); //$NON-NLS-1$
        gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
        label.setLayoutData(gd);

        configPage = new J2SConfigPage(comp, SWT.NONE);
        configPage.forClasspathTab();
        configPage.getRestoreDefaultButton().addSelectionListener(new SelectionAdapter() {

            public void widgetSelected(SelectionEvent e) {
                ILaunchConfigurationWorkingCopy configCopy = ((ILaunchConfigurationWorkingCopy) fLaunchConfiguration);
                try {
                    String classpath = configCopy.getAttribute(IJ2SLauchingConfiguration.J2S_CLASS_PATH,
                            (String) null);
                    String abandonClasspath = configCopy
                            .getAttribute(IJ2SLauchingConfiguration.J2S_ABANDON_CLASS_PATH, (String) null);
                    if ((classpath == null || classpath.trim().length() == 0)
                            && (abandonClasspath == null || abandonClasspath.trim().length() == 0)) {
                        return;
                    }
                    configCopy.setAttribute(IJ2SLauchingConfiguration.J2S_CLASS_PATH, (String) null);
                    configCopy.setAttribute(IJ2SLauchingConfiguration.J2S_ABANDON_CLASS_PATH, (String) null);
                    IJavaModel javaModel = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
                    String projectName = fLaunchConfiguration
                            .getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, (String) null);
                    if ((projectName == null) || (projectName.trim().length() < 1)) {
                        return;
                    }
                    IJavaProject javaProject = javaModel.getJavaProject(projectName);
                    if ((javaProject == null) || !javaProject.exists()) {
                        return;
                    }
                    IProject project = javaProject.getProject();
                    String prjFolder = project.getLocation().toOSString();
                    File workingDir = new File(prjFolder);
                    File j2sFile = new File(workingDir, ".j2s");
                    configPage.initConfigPage(j2sFile);
                    updateLaunchConfigurationDialog();
                } catch (JavaModelException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (CoreException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        });
        configPage.addConfigModifiedListener(new IJ2SConfigModifiedListener() {

            public void configModified() {
                setDirty(true);
                updateLaunchConfigurationDialog();
            }

        });
    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
     */
    public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration)
     */
    public void initializeFrom(ILaunchConfiguration configuration) {
        setDirty(false);
        this.fLaunchConfiguration = configuration;
        try {
            IJavaModel javaModel = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
            String projectName = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME,
                    (String) null);
            if ((projectName == null) || (projectName.trim().length() < 1)) {
                return;
            }
            IJavaProject javaProject = javaModel.getJavaProject(projectName);
            if ((javaProject == null) || !javaProject.exists()) {
                return;
            }
            IProject project = javaProject.getProject();
            String prjFolder = project.getLocation().toOSString();
            File workingDir = new File(prjFolder);
            String path = javaProject.getOutputLocation().toString();
            int idx = path.indexOf('/', 2);
            String relativePath = null;
            if (idx != -1) {
                relativePath = path.substring(idx + 1);
            }
            File j2sFile = new File(workingDir, ".j2s");
            String classpath = configuration.getAttribute(IJ2SLauchingConfiguration.J2S_CLASS_PATH, (String) null);
            String abandonClasspath = configuration.getAttribute(IJ2SLauchingConfiguration.J2S_ABANDON_CLASS_PATH,
                    (String) null);
            if ((classpath == null || classpath.trim().length() == 0)
                    && (abandonClasspath == null || abandonClasspath.trim().length() == 0)) {
                configPage.initConfigPage(j2sFile);
            } else {
                if (relativePath == null) {
                    relativePath = "";
                }
                String propStr = "j2s.compiler.status=enable\r\nj2s.output.path=" + relativePath
                        + "\r\nj2s.resources.list=" + classpath + "\r\nj2s.abandoned.resources.list="
                        + abandonClasspath;
                configPage.initConfigPage(j2sFile, new ByteArrayInputStream(propStr.getBytes()));
            }
        } catch (CoreException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
     */
    public void performApply(ILaunchConfigurationWorkingCopy configuration) {
        try {
            IJavaModel javaModel = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
            String projectName = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME,
                    (String) null);
            if ((projectName == null) || (projectName.trim().length() < 1)) {
                return;
            }
            IJavaProject javaProject = javaModel.getJavaProject(projectName);
            if ((javaProject == null) || !javaProject.exists()) {
                return;
            }
            IProject project = javaProject.getProject();
            String prjFolder = project.getLocation().toOSString();
            File workingDir = new File(prjFolder);
            boolean useDefault = true;
            try {
                useDefault = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_DEFAULT_CLASSPATH,
                        true);
            } catch (CoreException e) {
                //JDIDebugUIPlugin.log(e);
            }
            String path = javaProject.getOutputLocation().toString();
            int idx = path.indexOf('/', 2);
            String relativePath = null;
            if (idx != -1) {
                relativePath = path.substring(idx + 1);
            }
            File j2sFile = new File(workingDir, ".j2s");
            String classpath = configuration.getAttribute(IJ2SLauchingConfiguration.J2S_CLASS_PATH, (String) null);
            String abandonClasspath = configuration.getAttribute(IJ2SLauchingConfiguration.J2S_ABANDON_CLASS_PATH,
                    (String) null);
            if (relativePath == null) {
                relativePath = "";
            }
            String propStr = "j2s.output.path=" + relativePath + "\r\nj2s.resources.list=" + classpath
                    + "\r\nj2s.abandoned.resources.list==" + abandonClasspath;
            InputStream is = new ByteArrayInputStream(propStr.getBytes());
            Properties prop = configPage.getUpdatedProperties(is, j2sFile);
            String resList = prop.getProperty("j2s.resources.list");
            if (!resList.equals(classpath)) {
                configuration.setAttribute(IJ2SLauchingConfiguration.J2S_CLASS_PATH, resList);
            }
            resList = prop.getProperty("j2s.abandoned.resources.list");
            if (!resList.equals(classpath)) {
                configuration.setAttribute(IJ2SLauchingConfiguration.J2S_ABANDON_CLASS_PATH, resList);
            }
        } catch (CoreException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName()
     */
    public String getName() {
        return LauncherMessages.JavaClasspathTab_Cla_ss_path_3; //$NON-NLS-1$
    }

    /**
     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage()
     */
    public static Image getClasspathImage() {
        return JavaDebugImages.get(JavaDebugImages.IMG_OBJS_CLASSPATH);
    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage()
     */
    public Image getImage() {
        return getClasspathImage();
    }

}