ar.com.tadp.xml.rinzo.jdt.actions.CreateClassAction.java Source code

Java tutorial

Introduction

Here is the source code for ar.com.tadp.xml.rinzo.jdt.actions.CreateClassAction.java

Source

/*****************************************************************************
 * This file is part of Rinzo
 *
 * Author: Claudio Cancinos
 * WWW: https://sourceforge.net/projects/editorxml
 * Copyright (C): 2008, Claudio Cancinos
 * 
 * This program 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
 * of the License, or (at your option) any later version.
 * 
 * This program 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 General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this program; If not, see <http://www.gnu.org/licenses/>
 ****************************************************************************/
package ar.com.tadp.xml.rinzo.jdt.actions;

import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.core.PackageFragmentRoot;
import org.eclipse.jdt.internal.ui.wizards.NewClassCreationWizard;
import org.eclipse.jdt.ui.wizards.NewClassWizardPage;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.ide.ResourceUtil;

import ar.com.tadp.xml.rinzo.jdt.RinzoJDTPlugin;
import ar.com.tadp.xml.rinzo.jdt.Utils;
import ar.com.tadp.xml.rinzo.jdt.eclipse.copies.PixelConverter;

/**
 * Action to create a class from the class name selected in the editor.
 * 
 * @author ccancinos
 */
public class CreateClassAction extends ClassNameSelectedAction {
    public static final String ID = "CreateClassAction.";

    protected boolean getEnableValue(IType type) {
        return type == null && ResourceUtil.getFile(this.getTextEditor().getEditorInput()) != null;
    }

    public void run(IAction action) {
        if (!Utils.isEmpty(this.getSelection())) {
            IWorkbench workbench = RinzoJDTPlugin.getDefault().getWorkbench();
            Shell shell = workbench.getActiveWorkbenchWindow().getShell();
            NewClassCreationWizard wizard = new NewClassCreationWizard();
            String className = this.getSelection().substring(this.getSelection().lastIndexOf(".") + 1);
            String packageName = this.getSelection().substring(0, this.getSelection().lastIndexOf("."));
            wizard.init(workbench, new StructuredSelection(className));
            WizardDialog dialog = new WizardDialog(shell, wizard);
            PixelConverter converter = new PixelConverter(shell);
            dialog.setMinimumPageSize(converter.convertWidthInCharsToPixels(70),
                    converter.convertHeightInCharsToPixels(20));
            dialog.create();
            NewClassWizardPage page = (NewClassWizardPage) wizard.getPage("NewClassWizardPage");
            page.setTypeName(className, true);
            page.setAddComments(true, true);
            IPackageFragmentRoot sourceFolder = this.getSourceFolder();
            page.setPackageFragmentRoot(sourceFolder, true);
            page.setPackageFragment(sourceFolder.getPackageFragment(packageName), true);
            dialog.open();
        }
    }

    private IPackageFragmentRoot getSourceFolder() {
        try {
            IPackageFragmentRoot[] roots = this.getActiveJavaProject().getPackageFragmentRoots();
            //If the xml file is inside a source folder I look for it
            for (int i = 0; i < roots.length; i++) {
                if (roots[i].getPath().isPrefixOf(this.getAsociatedResource().getFullPath())) {
                    return roots[i];
                }
            }

            //If it's not I look for the first source folder available
            for (int j = 0; j < roots.length; j++) {
                if (roots[j] instanceof PackageFragmentRoot) {
                    return roots[j];
                }
            }

            //Otherwise I return the project root folder... :\
            return this.getActiveJavaProject().getPackageFragmentRoot(this.getActiveJavaProject().getResource());
        } catch (JavaModelException e) {
            throw new RuntimeException(e);
        }
    }
}