org.eclipse.emf.mwe2.language.ui.wizard.NewMwe2FileWizard.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.emf.mwe2.language.ui.wizard.NewMwe2FileWizard.java

Source

/*******************************************************************************
 * Copyright (c) 2010 itemis AG (http://www.itemis.eu) 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
 *******************************************************************************/
package org.eclipse.emf.mwe2.language.ui.wizard;

import java.io.InputStream;

import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;
import org.eclipse.xtext.util.StringInputStream;

import com.google.inject.Inject;
import com.google.inject.name.Named;

/**
 * @author Sebastian Zarnekow - Initial contribution and API
 */
public class NewMwe2FileWizard extends BasicNewResourceWizard {

    public static final String WIZARD_ID = "org.eclipse.emf.mwe2.language.ui.wizard.NewMwe2FileWizard"; //$NON-NLS-1$

    private WizardNewFileCreationPage mainPage;

    private static final Logger logger = Logger.getLogger(NewMwe2FileWizard.class);

    @Inject
    @Named("file.extensions")
    private String extension;

    @Inject
    private IWorkspace workspace;

    @Override
    public void addPages() {
        super.addPages();
        mainPage = new WizardNewFileCreationPage("newFilePage1", getSelection()) { //$NON-NLS-1$
            @Override
            protected InputStream getInitialContents() {
                String module = getModule();
                if (module != null) {
                    String content = String.format(Messages.NewMwe2FileWizard_initialContent, module);
                    return new StringInputStream(content);
                }
                return new StringInputStream(""); //$NON-NLS-1$
            }

            protected String getModule() {
                IPath path = getContainerFullPath();
                IProject project = null;
                for (IProject p : workspace.getRoot().getProjects()) {
                    if (p.getFullPath().isPrefixOf(path)) {
                        project = p;
                        break;
                    }
                }
                IJavaProject javaProject = JavaCore.create(project);
                if (javaProject != null) {
                    try {
                        IPackageFragmentRoot root = null;
                        for (IPackageFragmentRoot candidate : javaProject.getPackageFragmentRoots()) {
                            if (candidate.getPath().isPrefixOf(path)) {
                                root = candidate;
                                break;
                            }
                        }
                        if (root != null) {
                            IPath relativePath = path.makeRelativeTo(root.getPath());
                            String pack = relativePath.toString().replace('/', '.');
                            String fileName = getFileName();
                            fileName = fileName.substring(0, fileName.indexOf("." + extension)); //$NON-NLS-1$
                            String module = pack + "." + fileName; //$NON-NLS-1$
                            return module;
                        }
                    } catch (JavaModelException e) {
                        logger.error(e.getMessage(), e);
                    }
                }
                return null;
            }
        };
        mainPage.setTitle(Messages.NewMwe2FileWizard_title);
        mainPage.setDescription(Messages.NewMwe2FileWizard_description);
        mainPage.setFileExtension(extension);
        addPage(mainPage);
    }

    @Override
    public void init(IWorkbench workbench, IStructuredSelection currentSelection) {
        super.init(workbench, currentSelection);
        setWindowTitle(Messages.NewMwe2FileWizard_title);
        setNeedsProgressMonitor(true);
    }

    @Override
    protected void initializeDefaultPageImageDescriptor() {
        ImageDescriptor descriptor = AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.ui.ide", //$NON-NLS-1$
                "$nl$/icons/full/wizban/newfile_wiz.png"); //$NON-NLS-1$
        setDefaultPageImageDescriptor(descriptor);
    }

    @Override
    public boolean performFinish() {
        IFile file = mainPage.createNewFile();
        if (file == null) {
            return false;
        }

        selectAndReveal(file);

        // Open editor on new file. Cannot use the URIEditorOpener since the file was not built yet.
        IWorkbenchWindow dw = getWorkbench().getActiveWorkbenchWindow();
        try {
            if (dw != null) {
                IWorkbenchPage page = dw.getActivePage();
                if (page != null) {
                    IDE.openEditor(page, file, true);
                }
            }
        } catch (PartInitException e) {
            logger.error(e.getMessage(), e);
        }

        return true;
    }
}