001    /*
002     * Created on Aug 11, 2008
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
005     * in compliance with the License. You may obtain a copy of the License at
006     *
007     * http://www.apache.org/licenses/LICENSE-2.0
008     *
009     * Unless required by applicable law or agreed to in writing, software distributed under the License
010     * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
011     * or implied. See the License for the specific language governing permissions and limitations under
012     * the License.
013     *
014     * Copyright @2008-2010 the original author or authors.
015     */
016    package org.fest.swing.edt;
017    
018    import static javax.swing.SwingUtilities.isEventDispatchThread;
019    
020    import org.fest.swing.exception.ActionFailedException;
021    
022    /**
023     * Understands a task that should be executed in the event dispatch thread.
024     *
025     * @author Alex Ruiz
026     */
027    public abstract class GuiTask extends GuiAction {
028    
029      /**
030       * Runs this task action and verifies that it is executed in the event dispatch thread.
031       * @throws ActionFailedException if this task is not executed in the event dispatch thread.
032       */
033      public final void run() {
034        if (!isEventDispatchThread())
035          throw ActionFailedException.actionFailure("Task should be executed in the event dispatch thread");
036        try {
037          executeInEDT();
038        } catch (Throwable t) {
039          catchedException(t);
040        } finally {
041          notifyExecutionCompleted();
042        }
043      }
044    
045      /**
046       * Specifies the action to execute in the event dispatch thread.
047       * @throws Throwable any error thrown when executing an action in the event dispatch thread.
048       */
049      protected abstract void executeInEDT() throws Throwable;
050    }