Package com.google.gxp.base

Source Code of com.google.gxp.base.GxpTemplate$TunnelingGxpClosure

/*
* Copyright (C) 2008 Google Inc.
*
* 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.
*/

package com.google.gxp.base;

import java.io.IOException;
import java.util.Locale;
import java.util.ResourceBundle;

/**
* This is the superclass of all GXP templates. Contains helper classes and
* functions.
*
* Subclasses will have static methods of the form:
*
*     public static void write(Appendable gxp_output, GxpContext gxp_context, ...)
*     public static HtmlClosure getGxpClosure(...)
*
* where '...' is the list of parameters defined in the GXP source.
*/
public class GxpTemplate {
  /**
   * @param source message source to use
   * @param locale the Locale to translate this message to
   * @param id numeric ID of message to retrieve
   * @param parameters the parameters necessary for the specified message
   *
   * @return a String representing the specified message with the given arguments in
   * this given Locale.
   */
  protected static String getMessage(String source, Locale locale, long id, String... parameters) {
    return getRawMessage(source, locale, id).toString(parameters);
  }

  protected static Message getRawMessage(String source, Locale locale, long id) {
    ResourceBundle bundle = ResourceBundle.getBundle(source, locale);
    return Message.getInstance(bundle.getString(String.valueOf(id)));
  }

  /**
   * Abstract base class for {@code GxpClosure}s created by the GXP
   * compiler that need to use exception tunneling.
   *
   * @see com.google.gxp.compiler.java.JavaCodeGenerator
   */
  protected abstract static class TunnelingGxpClosure implements GxpClosure {
    /**
     * {@inheritDoc}
     *
     * @throws GxpRuntimeException when the underlying implementation throws a
     * checked exception other than {@code IOException}.
     */
    @Override
    public final void write(Appendable out, GxpContext gxpContext)
        throws IOException {
      try {
        writeImpl(out, gxpContext);
      } catch (RuntimeException rtx) {
        throw rtx;
      } catch (IOException iox) {
        throw iox;
      } catch (Exception checkedException) {
        throw GxpRuntimeException.wrap(checkedException);
      }
    }

    /**
     * The underlying implementation. It is recommended that implementations of
     * this method declare specific checked exceptions rather than just "throws
     * Exception".
     */
    protected abstract void writeImpl(Appendable out, GxpContext gxpContext)
        throws Exception;
  }

  /**
   * Abstract base class for anonymous {@code GxpClosure}s created by the GXP
   * compiler. The equals and hashCode methods use the class's identity for
   * equality. That is, all instances of a specific {@code AnonymousGxpClosure}
   * subclass are considered to be equal to each other. This is required so that
   * the Once template can reliably compare these anonymous GxpClosure
   * implementations.
   *
   * @see com.google.gxp.compiler.java.JavaCodeGenerator
   */
  protected abstract static class AnonymousGxpClosure
      extends TunnelingGxpClosure {

    @Override
    public boolean equals(Object obj) {
      return (obj == null) ? false : obj.getClass() == this.getClass();
    }

    @Override
    public int hashCode() {
      return getClass().hashCode();
    }
  }
}
TOP

Related Classes of com.google.gxp.base.GxpTemplate$TunnelingGxpClosure

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.