org.eclipse.jpt.jpa.ui.internal.wizards.entity.EntityWizard.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jpt.jpa.ui.internal.wizards.entity.EntityWizard.java

Source

/*******************************************************************************
 * Copyright (c) 2008, 2013 SAP AG, Walldorf 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:
 *     SAP AG - initial API and implementation
 *     Dimiter Dimitrov, d.dimitrov@sap.com - initial API and implementation     
 ******************************************************************************/
package org.eclipse.jpt.jpa.ui.internal.wizards.entity;

import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.OPEN_IN_EDITOR;
import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.PROJECT;
import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.QUALIFIED_CLASS_NAME;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jpt.common.core.internal.utility.PlatformTools;
import org.eclipse.jpt.common.ui.internal.WorkbenchTools;
import org.eclipse.jpt.jpa.core.context.JpaContextModel;
import org.eclipse.jpt.jpa.ui.JptJpaUiImages;
import org.eclipse.jpt.jpa.ui.internal.plugin.JptJpaUiPlugin;
import org.eclipse.jpt.jpa.ui.internal.wizards.entity.data.model.EntityDataModelProvider;
import org.eclipse.jpt.jpa.ui.wizards.entity.JptJpaUiWizardsEntityMessages;
import org.eclipse.jst.j2ee.internal.plugin.J2EEEditorUtility;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.ide.IDE;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.frameworks.datamodel.IDataModelProvider;
import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizard;

public class EntityWizard extends DataModelWizard implements INewWizard {

    protected String initialProjectName;

    protected IStructuredSelection selection;

    public EntityWizard(IDataModel model) {
        super(model);
        setWindowTitle(JptJpaUiWizardsEntityMessages.ENTITY_WIZARD_TITLE);
        setDefaultPageImageDescriptor(JptJpaUiImages.ENTITY_BANNER);
    }

    public EntityWizard() {
        this(null);
    }

    @Override
    protected void doAddPages() {
        EntityClassWizardPage page1 = new EntityClassWizardPage(getDataModel(), "pageOne", //$NON-NLS-1$
                JptJpaUiWizardsEntityMessages.ENTITY_WIZARD_PAGE_DESCRIPTION,
                JptJpaUiWizardsEntityMessages.ENTITY_WIZARD_PAGE_TITLE);
        page1.setProjectName(this.initialProjectName);
        addPage(page1);
        EntityFieldsWizardPage page2 = new EntityFieldsWizardPage(getDataModel(), "pageTwo"); //$NON-NLS-1$
        addPage(page2);
    }

    public IStructuredSelection getSelection() {
        return this.selection;
    }

    /**
     * EntityDataModelProvider
     */
    @Override
    protected IDataModelProvider getDefaultProvider() {
        return new EntityDataModelProvider();
    }

    @Override
    public boolean canFinish() {
        return getDataModel().isValid();
    }

    /**
     * Override the parent method in order to open the generated entity class in java editor
     */
    @Override
    protected void postPerformFinish() throws InvocationTargetException {
        try {
            String className = getDataModel().getStringProperty(QUALIFIED_CLASS_NAME);
            IProject p = (IProject) getDataModel().getProperty(PROJECT);
            IJavaProject javaProject = J2EEEditorUtility.getJavaProject(p);
            IFile file = (IFile) javaProject.findType(className).getResource();
            openEditor(file);
        } catch (Exception cantOpen) {
            JptJpaUiPlugin.instance().logError(cantOpen);
        }
    }

    /**
     * This method is intended for internal use only. It will open the file, sent as parameter
     * in its own java editor
     */
    private void openEditor(final IFile file) {
        if (getDataModel().getBooleanProperty(OPEN_IN_EDITOR)) {
            if (file != null) {
                getShell().getDisplay().asyncExec(new Runnable() {
                    public void run() {
                        try {
                            IWorkbenchPage page = WorkbenchTools.getActivePage();
                            if (page != null) {
                                IDE.openEditor(page, file, true);
                            }
                        } catch (PartInitException e) {
                            JptJpaUiPlugin.instance().logError(e);
                        }
                    }
                });
            }
        }
    }

    public void init(IWorkbench workbench, IStructuredSelection sel) {
        this.selection = sel;
        this.initialProjectName = this.extractProjectName(sel.getFirstElement());
        getDataModel();
    }

    protected String extractProjectName(Object object) {
        if (object == null) {
            return null;
        }

        IResource resource = PlatformTools.getAdapter(object, IResource.class);
        if (resource != null) {
            return resource.getProject().getName();
        }

        IJavaElement javaElement = PlatformTools.getAdapter(object, IJavaElement.class);
        if (javaElement != null) {
            return javaElement.getJavaProject().getProject().getName();
        }

        JpaContextModel node = PlatformTools.getAdapter(object, JpaContextModel.class);
        if (node != null) {
            return node.getJpaProject().getProject().getName();
        }

        return null;
    }
}