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);
}
}