1 package jp.sourceforge.moreemacs.handlers;
\r
3 import java.util.regex.Pattern;
\r
5 import jp.sourceforge.moreemacs.MoreEmacs;
\r
7 import org.eclipse.core.commands.AbstractHandler;
\r
8 import org.eclipse.core.commands.Command;
\r
9 import org.eclipse.core.commands.ExecutionEvent;
\r
10 import org.eclipse.core.commands.ExecutionException;
\r
11 import org.eclipse.ui.IWorkbenchWindow;
\r
12 import org.eclipse.ui.handlers.HandlerUtil;
\r
14 public final class CommandHandler extends AbstractHandler {
\r
17 public Object execute(ExecutionEvent event) throws ExecutionException {
\r
18 IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
\r
20 Execution exe = newExecution(event);
\r
21 if(!exe.init(window)) {
\r
26 } catch (Exception e) {
\r
27 throw new ExecutionException(e.getMessage(), e);
\r
33 private Execution newExecution(ExecutionEvent event) throws ExecutionException {
\r
35 String className = getExecutionClassName(event);
\r
36 Class<?> clazz = Class.forName(className);
\r
37 Object obj = clazz.newInstance();
\r
38 if(!(obj instanceof Execution)) {
\r
39 throw new ExecutionException("the class "+clazz.getName()+
\r
40 " does not implements Execution.");
\r
42 return (Execution)obj;
\r
43 } catch (ClassNotFoundException e) {
\r
44 throw new ExecutionException(e.getMessage(), e);
\r
45 } catch (InstantiationException e) {
\r
46 throw new ExecutionException(e.getMessage(), e);
\r
47 } catch (IllegalAccessException e) {
\r
48 throw new ExecutionException(e.getMessage(), e);
\r
53 // naming strategy will be separated to another class.
\r
54 private static final String COMMAND_PREFIX_QUOTED = Pattern.quote(
\r
55 MoreEmacs.class.getPackage().getName());
\r
56 private static final String HANDLER_PREFIX = CommandHandler.class.getPackage().getName();
\r
57 private static final String HANDLER_SUFFIX = "Execution";
\r
58 private static String getExecutionClassName(ExecutionEvent event) {
\r
59 Command command = event.getCommand();
\r
60 String className = command.getId()
\r
61 .replaceFirst(COMMAND_PREFIX_QUOTED, HANDLER_PREFIX)
\r