Package org.fest.swing.applet

Source Code of org.fest.swing.applet.BasicAppletContext$EmptyAppletEnumeration

/*
* Created on Jul 10, 2008
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*
* Copyright @2008-2013 the original author or authors.
*/
package org.fest.swing.applet;

import static java.util.Collections.enumeration;
import static org.fest.util.Lists.newArrayList;
import static org.fest.util.Maps.newHashMap;
import static org.fest.util.Preconditions.checkNotNull;

import java.applet.Applet;
import java.applet.AppletContext;
import java.applet.AudioClip;
import java.awt.Image;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

/**
* Basic (and limited) implementation of {@code AppletContext}.
*
* @author Alex Ruiz
* @author Yvonne Wang
*/
public class BasicAppletContext implements AppletContext {
  private static final Enumeration<Applet> NO_APPLETS = new EmptyAppletEnumeration();

  private static final class EmptyAppletEnumeration implements Enumeration<Applet> {
    EmptyAppletEnumeration() {}

    @Override
    public boolean hasMoreElements() {
      return false;
    }

    @Override
    public @Nullable Applet nextElement() {
      return null;
    }
  }

  private final Map<String, InputStream> streamMap = newHashMap();
  private final StatusDisplay statusDisplay;

  /**
   * Creates a new {@link BasicAppletContext}.
   *
   * @param statusDisplay where the application can inform users of its current state.
   * @throws NullPointerException if {@code statusDisplay} is {@code null}.
   */
  public BasicAppletContext(@Nonnull StatusDisplay statusDisplay) {
    this.statusDisplay = checkNotNull(statusDisplay);
  }

  /**
   * If the {@link StatusDisplay} passed to this context is an instance of {@link AppletViewer}, this method will return
   * the {@code Applet} of such {@code AppletViewer}. Otherwise this method returns {@code null}.
   *
   * @return the {@code Applet} in this context's {@link StatusDisplay} (if any.)
   * @see AppletContext#getApplet(String)
   */
  @Override
  public @Nullable Applet getApplet(@Nullable String name) {
    return appletFrom(statusDisplay);
  }

  /**
   * Returns an enumeration containing the {@code Applet} returned by {@link #getApplet(String)}. If
   * {@link #getApplet(String)} returns {@code null}, this method will return an empty enumeration.
   *
   * @return an enumeration containing the {@code Applet} in this context's {@code StatusDisplay} (if any.)
   * @see #getApplet(String)
   * @see AppletContext#getApplets()
   */
  @Override
  public @Nonnull Enumeration<Applet> getApplets() {
    Applet applet = appletFrom(statusDisplay);
    return applet == null ? NO_APPLETS : enumeration(newArrayList(applet));
  }

  private static @Nullable Applet appletFrom(@Nullable StatusDisplay statusDisplay) {
    if (!(statusDisplay instanceof AppletViewer)) {
      return null;
    }
    AppletViewer viewer = (AppletViewer) statusDisplay;
    return viewer.getApplet();
  }

  /**
   * Not implemented. Returns {@code null}.
   *
   * @see AppletContext#getAudioClip(URL)
   */
  @Override
  public @Nullable AudioClip getAudioClip(@Nullable URL url) {
    return null;
  }

  /**
   * Not implemented. Returns {@code null}.
   *
   * @see AppletContext#getImage(URL)
   */
  @Override
  public @Nullable Image getImage(@Nullable URL url) {
    return null;
  }

  /**
   * Returns the stream to which specified key is associated within this {@code AppletContext}. Returns {@code null} if
   * the {@code AppletContext} contains no stream for this key.
   *
   * @return the stream to which this {@code AppletContext} maps the key.
   * @param key key whose associated stream is to be returned.
   */
  @Override
  public @Nullable InputStream getStream(@Nullable String key) {
    return streamMap.get(key);
  }

  /**
   * Finds all the keys of the streams in this {@code AppletContext}.
   *
   * @return an iterator of all the names of the streams in this {@code AppletContext}.
   */
  @Override
  public @Nonnull Iterator<String> getStreamKeys() {
    return streamMap.keySet().iterator();
  }

  /**
   * Associates the specified stream with the specified key in this {@code AppletContext}.
   *
   * @param key key with which the specified value is to be associated.
   * @param stream stream to be associated with the specified key. If this parameter is {@code null}, the specified key
   *          is removed in this {@code AppletContext}.
   */
  @Override
  public void setStream(@Nullable String key, @Nullable InputStream stream) {
    if (stream == null) {
      streamMap.remove(key);
      return;
    }
    streamMap.put(key, stream);
  }

  /**
   * Not implemented.
   *
   * @see AppletContext#showDocument(URL)
   */
  @Override
  public void showDocument(@Nullable URL url) {}

  /**
   * Not implemented.
   *
   * @see AppletContext#showDocument(URL, String)
   */
  @Override
  public void showDocument(@Nullable URL url, @Nullable String target) {}

  /**
   * Requests that the given status be displayed in this context's {@link StatusDisplay}.
   *
   * @param status a message to display.
   */
  @Override
  public void showStatus(String status) {
    statusDisplay.showStatus(checkNotNull(status));
  }
}
TOP

Related Classes of org.fest.swing.applet.BasicAppletContext$EmptyAppletEnumeration

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.