Eclipse IDE 가 제공하는 Plugin-Project 중의 Hello World, Command 의 예

Posted by 빵빵빵
2012/02/16 18:47 전산(컴퓨터)/eclipse plugin



Hello, World Command의 기능
Hello, World Command라는 Plug-In Project는 Eclipse가 기본으로 제공하는 프로젝트이며 이 프로젝트를 실행하면 메뉴바에 Sample Menu 라는 메뉴가 생성되고 그 메뉴 아래에 생성된 아이템을 선택하면 화면에 다이얼로그를 출력하는 기능을 가지고 있다.

Hello, World Command 프로젝트 작성
File > New > Other > Plug-In Project 를 선택한 후, 디폴트로 화면을 설정하고 넘어가다보면 Templates 을 선택할 수 있는 화면에서 Hello, World Command를 선택하여 Finish를 선택하면 자동으로 프로젝트가 완성되고 그 안에 필요한 설정파일(plugin.xm)과 자바소스가 이미 작성되어 있다.

Hello, World Command 프로젝트 실행 및 추가된 메뉴(Sample Menu) 확인
프로젝트 아래의 plugin.xml > 마우스 우측 클릭 > Run As > Eclipse Application 선택
혹은 프로젝트 안의 META-INF/MANIFEST.MF > 마우스 우측 클릭 > Run As > Eclipse Application 선택

위와같이 선택하면 새로운 Eclipse IDE가 실행되고 Eclipse의 메뉴 중 Run, Windows 사이에 [Sample Menu]가 추가된 것을 확인할 수 있다.

Sample Menu > Sample Command 실행 및 다이얼로그 출력 확인
새로 추가된 Sample Menu 아래에 딸려 있는 Sample Command를 선택하면 해당 명령이 실행되고 화면에 다이얼로그가 출력되는 것을 확인할 수 있다.

사용자 삽입 이미지



툴바에 새롭게 추가된 아이콘 및 실행확인
아래의 그림처럼 Eclipse의 툴바에도 새로운 아이콘이 추가되어 클릭하면 메뉴의 아이템(커맨드)를 선택한 것과 같은 기능을 하고 있다.
사용자 삽입 이미지




META-INF/plugin.xml

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>

   <extension
         point="org.eclipse.ui.commands">
      <category
            name="Sample Category"
            id="HelloCommand.commands.category">
      </category>
      <command
            name="Sample Command"
            categoryId="HelloCommand.commands.category"
            id="HelloCommand.commands.sampleCommand">
      </command>
   </extension>
   <extension
         point="org.eclipse.ui.handlers">
      <handler
            commandId="HelloCommand.commands.sampleCommand"
            class="hellocommand.handlers.SampleHandler">
      </handler>
   </extension>
   <extension
         point="org.eclipse.ui.bindings">
      <key
            commandId="HelloCommand.commands.sampleCommand"
            contextId="org.eclipse.ui.contexts.window"
            sequence="M1+6"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
   </extension>
   <extension
         point="org.eclipse.ui.menus">
      <menuContribution
            locationURI="menu:org.eclipse.ui.main.menu?after=additions">
         <menu
               label="Sample Menu"
               mnemonic="M"
               id="HelloCommand.menus.sampleMenu">
            <command
                  commandId="HelloCommand.commands.sampleCommand"
                  mnemonic="S"
                  id="HelloCommand.menus.sampleCommand">
            </command>
         </menu>
      </menuContribution>
      <menuContribution
            locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
         <toolbar
               id="HelloCommand.toolbars.sampleToolbar">
            <command
                  commandId="HelloCommand.commands.sampleCommand"
                  icon="icons/sample.gif"
                  tooltip="Say hello world"
                  id="HelloCommand.toolbars.sampleCommand">
            </command>
         </toolbar>
      </menuContribution>
   </extension>

</plugin>



SampleHandler.java

package hellocommand.handlers;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.jface.dialogs.MessageDialog;

/**
 * Our sample handler extends AbstractHandler, an IHandler base class.
 * @see org.eclipse.core.commands.IHandler
 * @see org.eclipse.core.commands.AbstractHandler
 */
public class SampleHandler extends AbstractHandler {
 /**
  * The constructor.
  */
 public SampleHandler() {
 }

 /**
  * the command has been executed, so extract extract the needed information
  * from the application context.
  */
 public Object execute(ExecutionEvent event) throws ExecutionException {
  IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
  MessageDialog.openInformation(
    window.getShell(),
    "HelloCommand",                // 메시지 박스의 타이틀바에 출력될 문자열
    "Hello, Eclipse world");        // 메시지 박스의 내용으로 사용될 문자열
  return null;
 }
}





Activator.java

package hellocommand;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;

/**
 * The activator class controls the plug-in life cycle
 */
public class Activator extends AbstractUIPlugin {

 // The plug-in ID
 public static final String PLUGIN_ID = "HelloCommand"; //$NON-NLS-1$

 // The shared instance
 private static Activator plugin;
 
 /**
  * The constructor
  */
 public Activator() {
 }

 /*
  * (non-Javadoc)
  * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
  */
 public void start(BundleContext context) throws Exception {
  super.start(context);
  plugin = this;
 }

 /*
  * (non-Javadoc)
  * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
  */
 public void stop(BundleContext context) throws Exception {
  plugin = null;
  super.stop(context);
 }

 /**
  * Returns the shared instance
  *
  * @return the shared instance
  */
 public static Activator getDefault() {
  return plugin;
 }

 /**
  * Returns an image descriptor for the image file at the given
  * plug-in relative path
  *
  * @param path the path
  * @return the image descriptor
  */
 public static ImageDescriptor getImageDescriptor(String path) {
  return imageDescriptorFromPlugin(PLUGIN_ID, path);
 }
}


2012/02/16 18:47 2012/02/16 18:47

Tags

이 글에는 트랙백을 보낼 수 없습니다