addderbynature.java

来自「derby database source code.good for you.」· Java 代码 · 共 158 行

JAVA
158
字号
/*
 * 
 * Derby - Class org.apache.derby.ui.popup.actions.AddDerbyNature
 * 
 * Copyright 2002, 2004 The Apache Software Foundation or its licensors, as
 * applicable.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 *  
 */

package org.apache.derby.ui.popup.actions;

import org.apache.derby.ui.common.CommonNames;
import org.apache.derby.ui.common.Messages;
import org.apache.derby.ui.util.DerbyUtils;
import org.apache.derby.ui.util.Logger;
import org.apache.derby.ui.util.SelectionUtil;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;

public class AddDerbyNature implements IObjectActionDelegate
{

    private IJavaProject currentJavaProject;
    private IProject currentProject;

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction,
     *      org.eclipse.ui.IWorkbenchPart)
     */
    public void setActivePart(IAction action, IWorkbenchPart targetPart)
    {
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
     */
    public void run(IAction action)
    {
        IWorkbenchWindow window = PlatformUI.getWorkbench()
                .getActiveWorkbenchWindow();
        Cursor waitCursor = new Cursor(window.getShell().getDisplay(),
                SWT.CURSOR_WAIT);
        try
        {
            window.getShell().setCursor(waitCursor);
            ((ApplicationWindow) window).setStatus(Messages.ADDING_NATURE);

            //new way
            if (currentJavaProject == null)
            {
                // if the java nature is not present
                // it must be added, along with the Derby nature
                IProjectDescription description = currentProject
                        .getDescription();
                String[] natureIds = description.getNatureIds();
                String[] newNatures = new String[natureIds.length + 2];
                System.arraycopy(natureIds, 0, newNatures, 0, natureIds.length);
                newNatures[newNatures.length - 2] = JavaCore.NATURE_ID;
                newNatures[newNatures.length - 1] = CommonNames.DERBY_NATURE;
                description.setNatureIds(newNatures);
                currentProject.setDescription(description, null);

                currentJavaProject = (IJavaProject) JavaCore
                        .create((IProject) currentProject);
            }
            else
            {
                //add the derby nature, the java nature is already present
                IProjectDescription description = currentJavaProject
                        .getProject().getDescription();
                String[] natures = description.getNatureIds();
                String[] newNatures = new String[natures.length + 1];
                System.arraycopy(natures, 0, newNatures, 0, natures.length);
                // must prefix with plugin id
                newNatures[natures.length] = CommonNames.DERBY_NATURE;
                description.setNatureIds(newNatures);
                currentJavaProject.getProject().setDescription(description,
                        null);
            }

            IClasspathEntry[] rawClasspath = currentJavaProject
                    .getRawClasspath();

            currentJavaProject.setRawClasspath(DerbyUtils
                    .addDerbyJars(rawClasspath), null);

            // refresh project so user sees new files, libraries, etc
            currentJavaProject.getProject().refreshLocal(
                    IResource.DEPTH_INFINITE, null);
            ((ApplicationWindow) window).setStatus(Messages.DERBY_NATURE_ADDED);

        } catch ( Exception e)
        {
            Logger.log(Messages.ERROR_ADDING_NATURE + " '"
                    + currentJavaProject.getProject().getName() + "' : " + e,
                    IStatus.ERROR);
            Shell shell = new Shell();
            MessageDialog.openInformation(shell, CommonNames.PLUGIN_NAME,
                    Messages.ERROR_ADDING_NATURE + ":\n"
                            + SelectionUtil.getStatusMessages(e));
        } finally
        {
            window.getShell().setCursor(null);
            waitCursor.dispose();
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
     *      org.eclipse.jface.viewers.ISelection)
     */
    public void selectionChanged(IAction action, ISelection selection)
    {
        currentJavaProject = SelectionUtil.findSelectedJavaProject(selection);

        if (currentJavaProject == null)
        {
            currentProject = org.apache.derby.ui.util.SelectionUtil
                    .findSelectedProject(selection);
        }

    }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?