org.eclipse.e4.demo.simpleide.handlers.NewProjectDialogHandler.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.e4.demo.simpleide.handlers.NewProjectDialogHandler.java

Source

/*******************************************************************************
 * Copyright (c) 2010 BestSolution.at 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:
 *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
 ******************************************************************************/
package org.eclipse.e4.demo.simpleide.handlers;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import javax.inject.Named;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.core.services.log.Logger;
import org.eclipse.e4.core.services.statusreporter.StatusReporter;
import org.eclipse.e4.demo.simpleide.internal.ServiceRegistryComponent;
import org.eclipse.e4.demo.simpleide.services.INLSLookupFactoryService;
import org.eclipse.e4.demo.simpleide.services.IProjectService;
import org.eclipse.e4.ui.services.IServiceConstants;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
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.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class NewProjectDialogHandler {
    private Map<IProjectService, Image> images = new HashMap<IProjectService, Image>();
    private String projectName = ""; //$NON-NLS-1$
    private IProjectService creator;

    @Execute
    public void openNewProjectDialog(@Named(IServiceConstants.ACTIVE_SHELL) Shell parentShell, IWorkspace workspace,
            IProgressMonitor monitor, final ServiceRegistryComponent serviceRegistry, StatusReporter reporter,
            Logger logger, final INLSLookupFactoryService nlsFactory) {

        TitleAreaDialog dialog = new TitleAreaDialog(parentShell) {
            private Text projectName;
            private TableViewer projectType;
            private Messages messages = nlsFactory.createNLSLookup(Messages.class);

            @Override
            protected int getShellStyle() {
                return super.getShellStyle() | SWT.SHEET;
            }

            @Override
            protected Control createDialogArea(Composite parent) {
                Composite comp = (Composite) super.createDialogArea(parent);
                getShell().setText(messages.NewProjectDialogHandler_ShellTitle());
                setTitle(messages.NewProjectDialogHandler_Title());
                setMessage(messages.NewProjectDialogHandler_Message());

                final Image titleImage = new Image(parent.getDisplay(),
                        getClass().getClassLoader().getResourceAsStream("/icons/wizard/newprj_wiz.png"));

                setTitleImage(titleImage);

                final Image shellImg = new Image(parent.getDisplay(),
                        getClass().getClassLoader().getResourceAsStream("/icons/newprj_wiz.gif"));
                getShell().setImage(shellImg);
                getShell().addDisposeListener(new DisposeListener() {

                    public void widgetDisposed(DisposeEvent e) {
                        shellImg.dispose();
                        titleImage.dispose();
                    }
                });

                Composite container = new Composite(comp, SWT.NONE);
                container.setLayoutData(new GridData(GridData.FILL_BOTH));
                container.setLayout(new GridLayout(2, false));

                Label l = new Label(container, SWT.NONE);
                l.setText(messages.NewProjectDialogHandler_Name());

                projectName = new Text(container, SWT.BORDER);
                projectName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

                l = new Label(container, SWT.NONE);
                l.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
                l.setText(messages.NewProjectDialogHandler_Type());

                projectType = new TableViewer(container);
                projectType.setContentProvider(new ArrayContentProvider());
                projectType.setLabelProvider(new LabelProvider() {
                    @Override
                    public String getText(Object element) {
                        IProjectService el = (IProjectService) element;
                        return el.getLabel();
                    }

                    @Override
                    public Image getImage(Object element) {
                        IProjectService el = (IProjectService) element;
                        Image img = images.get(el);
                        if (img == null) {
                            URL url;
                            InputStream in = null;
                            try {
                                url = FileLocator.find(new URL(el.getIconURI()));
                                in = url.openStream();
                                img = new Image(getShell().getDisplay(), in);
                                images.put(el, img);
                            } catch (MalformedURLException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } finally {
                                if (in != null) {
                                    try {
                                        in.close();
                                    } catch (IOException e) {
                                    }
                                }
                            }
                        }
                        return img;
                    }
                });

                Vector<IProjectService> creators = serviceRegistry.getCreators();
                projectType.setInput(creators);
                if (creators.size() > 0) {
                    projectType.setSelection(new StructuredSelection(creators.get(0)));
                }
                projectType.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));

                getShell().addDisposeListener(new DisposeListener() {

                    public void widgetDisposed(DisposeEvent e) {
                        for (Image img : images.values()) {
                            img.dispose();
                        }
                        images.clear();
                    }
                });

                return comp;
            }

            @Override
            protected void okPressed() {
                if (projectType.getSelection().isEmpty()) {
                    setMessage("Please select a project type", IMessageProvider.ERROR);
                    return;
                }

                if (projectName.getText().trim().length() == 0) {
                    setMessage("Please enter a projectname", IMessageProvider.ERROR);
                    return;
                }

                NewProjectDialogHandler.this.creator = (IProjectService) ((IStructuredSelection) projectType
                        .getSelection()).getFirstElement();
                NewProjectDialogHandler.this.projectName = projectName.getText();

                super.okPressed();
            }
        };

        if (dialog.open() == IDialogConstants.OK_ID) {
            creator.createProject(parentShell, workspace, reporter, logger, monitor, projectName);
        }
    }
}