`

ActionHandler.java

 
阅读更多
1: /*******************************************************************************
   2:  * Copyright (c) 2004, 2006 IBM Corporation and others.
   3:  * All rights reserved. This program and the accompanying materials
   4:  * are made available under the terms of the Eclipse Public License v1.0
   5:  * which accompanies this distribution, and is available at
   6:  * http://www.eclipse.org/legal/epl-v10.html
   7:  *
   8:  * Contributors:
   9:  *     IBM Corporation - initial API and implementation
  10:  *******************************************************************************/
  11: package org.eclipse.jface.commands;
  12:
  13: import org.eclipse.core.commands.AbstractHandler;
  14: import org.eclipse.core.commands.ExecutionEvent;
  15: import org.eclipse.core.commands.ExecutionException;
  16: import org.eclipse.core.commands.HandlerEvent;
  17: import org.eclipse.core.commands.IHandlerListener;
  18: import org.eclipse.jface.action.IAction;
  19: import org.eclipse.jface.util.IPropertyChangeListener;
  20: import org.eclipse.jface.util.PropertyChangeEvent;
  21: import org.eclipse.swt.widgets.Event;
  22:
  23: /**
  24:  * <p>
  25:  * This class adapts instances of <code>IAction</code> to
  26:  * <code>IHandler</code>.
  27:  * </p>
  28:  *
  29:  * @since 3.1
  30:  */
  31:   public final class ActionHandler extends AbstractHandler {
  32:
  33:    /**
  34:     * The wrapped action. This value is never <code>null</code>.
  35:     */
  36:    private final IAction action;
  37:
  38:    /**
  39:     * The property change listener hooked on to the action. This is initialized
  40:     * when the first listener is attached to this handler, and is removed when
  41:     * the handler is disposed or the last listener is removed.
  42:     */
  43:    private IPropertyChangeListener propertyChangeListener;
  44:
  45:    /**
  46:     * Creates a new instance of this class given an instance of
  47:     * <code>IAction</code>.
  48:     *
  49:     * @param action
  50:     *            the action. Must not be <code>null</code>.
  51:     */
  52:       public ActionHandler(final IAction action) {
  53:           if (action == null) {
  54:            throw new NullPointerException();
  55:        }
  56:
  57:        this.action = action;
  58:    }
  59:
  60:       public final void addHandlerListener(final IHandlerListener handlerListener) {
  61:           if (!hasListeners()) {
  62:            attachListener();
  63:        }
  64:
  65:        super.addHandlerListener(handlerListener);
  66:    }
  67:
  68:    /**
  69:     * When a listener is attached to this handler, then this registers a
  70:     * listener with the underlying action.
  71:     *
  72:     * @since 3.1
  73:     */
  74:       private final void attachListener() {
  75:           if (propertyChangeListener == null) {
  76:               propertyChangeListener = new IPropertyChangeListener() {
  77:                public final void propertyChange(
  78:                           final PropertyChangeEvent propertyChangeEvent) {
  79:                    final String property = propertyChangeEvent.getProperty();
  80:                    fireHandlerChanged(new HandlerEvent(ActionHandler.this,
  81:                            IAction.ENABLED.equals(property), IAction.HANDLED
  82:                                    .equals(property)));
  83:                }
  84:            };
  85:        }
  86:
  87:        this.action.addPropertyChangeListener(propertyChangeListener);
  88:    }
  89:
  90:    /**
  91:     * When no more listeners are registered, then this is used to removed the
  92:     * property change listener from the underlying action.
  93:     */
  94:       private final void detachListener() {
  95:        this.action.removePropertyChangeListener(propertyChangeListener);
  96:        propertyChangeListener = null;
  97:    }
  98:
  99:    /**
100:     * Removes the property change listener from the action.
101:     *
102:     * @see org.eclipse.core.commands.IHandler#dispose()
103:     */
104:       public final void dispose() {
105:           if (hasListeners()) {
106:            action.removePropertyChangeListener(propertyChangeListener);
107:        }
108:    }
109:   
110:    public final Object execute(final ExecutionEvent event)
111:               throws ExecutionException {
112:        if ((action.getStyle() == IAction.AS_CHECK_BOX)
113:                   || (action.getStyle() == IAction.AS_RADIO_BUTTON)) {
114:            action.setChecked(!action.isChecked());
115:        }
116:        final Object trigger = event.getTrigger();
117:           try {
118:               if (trigger instanceof Event) {
119:                action.runWithEvent((Event) trigger);
120:            } else {
121:                action.runWithEvent(new Event());
122:            }
123:        } catch (Exception e) {
124:            throw new ExecutionException(
125:                    "While executing the action, an exception occurred", e); //$NON-NLS-1$
126:        }
127:        return null;
128:    }
129:
130:    /**
131:     * Returns the action associated with this handler
132:     *
133:     * @return the action associated with this handler (not null)
134:     * @since 3.1
135:     */
136:       public final IAction getAction() {
137:        return action;
138:    }
139:   
140:       public final boolean isEnabled() {
141:        return action.isEnabled();
142:    }
143:   
144:       public final boolean isHandled() {
145:        return action.isHandled();
146:    }
147:   
148:    public final void removeHandlerListener(
149:               final IHandlerListener handlerListener) {
150:        super.removeHandlerListener(handlerListener);
151:
152:           if (!hasListeners()) {
153:            detachListener();
154:        }
155:    }
156:   
157:       public final String toString() {
158:        final StringBuffer buffer = new StringBuffer();
159:
160:        buffer.append("ActionHandler("); //$NON-NLS-1$
161:        buffer.append(action);
162:        buffer.append(')');
163:
164:        return buffer.toString();
165:    }
166:}
分享到:
评论

相关推荐

    Java绘图板源码 画图源代码 Swing

    - `src`目录:包含了所有的Java源代码文件,可能有主类(如`Main.java`)、绘图工具类(如`DrawTools.java`)、图形类(如`Shape.java`)以及事件处理器(如`ActionHandler.java`)等。 - `lib`目录:可能包含了一些...

    java课程设计报告

    【Java课程设计报告】 在本次Java课程设计中,学生苗志强设计并实现了一个基于GUI的猜数字游戏。这个游戏的核心机制是让玩家猜测由程序随机生成的四个0到9之间不重复的整数。游戏的反馈机制是A表示位置和数字都正确...

    jbpm例子.doc

    - `MessageActionHandler`: 自动生成的ActionHandler,可根据需求保留或删除。 - `ehcache.xml`: 缓存配置文件,内置详细英文说明,无需修改除非有特殊需求。 - `hibernate.cfg.xml`: jBPM使用Hibernate进行数据...

    dialogflow-client:一个用于dialogflow的Java客户端,以设计用于Google助手的对话

    一个Java客户端和处理框架,用于使用Google助手创建转换。 API版本2中Webhook请求和响应的序列化/反序列化 不错的api,可在以下支持下定义对话 ssml 文本 建议筹码 基本卡 带注释的处理框架可实现清晰的代码分离 ...

    jfinal-1.1.3-src.zip

    - `com.jfinal.handler`:这里是HTTP请求的处理器,比如`ActionHandler`负责将请求映射到相应的Controller方法。 - `com.jfinal.render`:渲染模块,负责将处理结果转化为最终的HTTP响应,支持多种视图技术。 - `...

    jbpm 事件与动作的含义解释以及代码配置

    而动作则是对这些事件做出响应的一段代码,它可以是Java类(通常实现`ActionHandler`接口),也可以是简单的脚本代码(如Beanshell)。通过编写不同的动作,我们可以在流程的不同阶段执行特定的任务。 ##### 1.1 ...

    jfinal技术框架解析[借鉴].pdf

    JFinal 是一个轻量级的Java Web开发框架,它的设计目标是使开发更加高效和简单。JFinal 采用微内核全方位扩展架构,允许开发者在各个层面上进行自定义,以满足不同项目的需求。 在空间架构上,JFinal 由五个主要...

    JBPM工作流简介.docx

    public class MyActionHandler implements ActionHandler { public void execute(ExecutionContext executionContext) { System.out.println("MyActionHandler has executed: " + executionContext); } } ``` ...

    jfinal技术框架解析[整理].pdf

    JFinal 是一个基于Java语言的轻量级Web开发框架,其设计目标是高效、易用、足够小。本文将深入解析JFinal的技术架构,帮助理解其核心机制。 **1. 空间架构** JFinal 的空间架构由五个主要部分组成:Handler、...

    jbpm3.2开发总结[定义].pdf

    jBPM是一个强大的开源工作流管理系统,专注于Java平台上的业务流程管理。...在实际应用中,开发者可以根据需求编写自定义的ActionHandler类,实现特定的业务逻辑,例如在员工解雇流程中更新数据库记录的操作。

    jbpm3.2开发总结.pdf

    jbpm3.2是流行的Java业务流程管理(BPM)平台的一个版本,可用于设计、执行和管理企业级业务流程。本文主要围绕jbpm3.2在开发过程中的关键概念、组件、API使用以及配置等知识点进行总结。 首先,了解jbpm3.2需要...

    用JBoss jBPM管理业务流程

    public class MyActionHandler implements ActionHandler { public void execute(ExecutionContext executionContext) { System.out.println("MyActionHandler has executed: " + executionContext); } } ``` ...

    action_test

    1. `src/main/java` - 存放Java源代码,可能有`com.example.actiontest`或其他命名空间下的类,比如`ActionHandler`,用于处理用户动作。 2. `src/test/java` - 测试代码通常放在这里,使用JUnit或其他测试框架编写...

    jbpm实例代码技术文档

    在给定的Java代码中,定义了一个名为`NodeAction`的类,它实现了`ActionHandler`接口。`execute`方法是`ActionHandler`的核心,它将在流程到达节点时被调用。在`NodeAction`的例子中,`execute`方法只是简单地打印了...

    JFinal技术框架解析

    JFinal是一个基于Java语言的Web开发框架,具有轻量级、灵活、可扩展等特点。本文将对JFinal技术架构进行浅析,并对其空间架构、逻辑架构、代码架构和运作原理进行详细介绍。 空间架构 JFinal框架采用微内核全方位...

    jbpm安装及使用方法

    一个Task instance(任务实例)可以被分配给一个actorId (java.lang.String)。所有的Task instance都被保存在数据库中的表jbpm_taskinstance里。当你想得到特定用户的任务清单时,你就可以通过一个与用户关联的...

    player-engine:负责处理多媒体的播放行为

    PlayerEngine接口不对外开放,防止出现错误的调用,外部想进行播放,暂停,上下切换等操作时,需要通过调用ActionHandler中的execute接口, 并传入对应的枚举类型来执行。 注:MediaBase是准备作为一个jar包存在的,...

Global site tag (gtag.js) - Google Analytics