001    /*
002     * Created on Oct 27, 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 org.fest.swing.edt.GuiActionRunner.execute;
019    
020    import org.fest.assertions.Description;
021    import org.fest.swing.annotation.RunsInCurrentThread;
022    
023    /**
024     * Understands a <code>{@link Description}</code> that loads the text to return in the event dispatch thread.
025     *
026     * @author Alex Ruiz
027     * @author Yvonne Wang
028     */
029    public abstract class GuiLazyLoadingDescription implements Description {
030    
031      /**
032       * Executes <code>{@link #loadDescription()}</code> in the event dispatch thread.
033       * @return the text loaded in the event dispatch thread.
034       */
035      public final String value() {
036        return execute(new GuiQuery<String>() {
037          protected String executeInEDT() {
038            return loadDescription();
039          }
040        });
041      }
042    
043      /**
044       * Returns the lazy-loaded text of this description.
045       * <p>
046       * <b>Note:</b> This method is <b>not</b> guaranteed to be executed in the event dispatch thread (EDT.) Clients are
047       * responsible for calling this method from the EDT.
048       * </p>
049       * @return the lazy-loaded text of this description.
050       */
051      @RunsInCurrentThread
052      protected abstract String loadDescription();
053    }