Package org.waveprotocol.box.webclient.stat.gwtevent

Source Code of org.waveprotocol.box.webclient.stat.gwtevent.GwtStatisticsEvent

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you 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 org.waveprotocol.box.webclient.stat.gwtevent;

import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArrayString;

import java.util.Iterator;

/**
* Java "Overlay" object of the event objects fired by the GWT stats system.
*/
public class GwtStatisticsEvent extends JavaScriptObject /*implements StatisticsEvent*/ {
  protected GwtStatisticsEvent() {
  }

  public final native String getModuleName() /*-{
    return this.moduleName == null ? null : "" + this.moduleName;
  }-*/;

  public final native String getSubSystem() /*-{
    return this.subSystem == null ? null : "" + this.subSystem;
  }-*/;

  public final native String getEventGroupKey() /*-{
    return this.evtGroup == null ? null : "" + this.evtGroup;
  }-*/;

  public final native double getMillis() /*-{
    return this.millis == null ? 0 : this.millis;
  }-*/;

  private final native JsArrayString getExtraParameterNames0() /*-{
    if (!this.extraParameters) {
      var a = new Array();
      for (name in this) {
        if (name != "moduleName" && name != "subSystem" && name != "evtGroup" && name != "millis") {
          a.push(name);
        }
      }
      this.extraParameters = a;
    }
    return this.extraParameters
  }-*/;

  public final native Object getExtraParameter(String name) /*-{
    var r = this[name], t = typeof(r);
    if (t == "number") {
      r = @java.lang.Double::new(D)(r);
    } else if (t == "boolean") {
      r = @java.lang.Boolean::new(Z)(r);
    }
    return r;
  }-*/;

  public final StatisticsEvent asEvent() {
    return new StatisticsEvent() {
      //@Override
      public String getModuleName() {
        return GwtStatisticsEvent.this.getModuleName();
      }
      //@Override
      public String getSubSystem() {
        return GwtStatisticsEvent.this.getSubSystem();
      }
      //@Override
      public String getEventGroupKey() {
        return GwtStatisticsEvent.this.getEventGroupKey();
      }
      //@Override
      public double getMillis() {
        return GwtStatisticsEvent.this.getMillis();
      }
      //@Override
      public Iterator<String> getExtraParameterNames() {
        final JsArrayString names = getExtraParameterNames0();
        return new Iterator<String>() {
          private int idx = 0;

          //@Override
          public boolean hasNext() {
            return idx < names.length();
          }

          //@Override
          public String next() {
            return names.get(idx++);
          }

          //@Override
          public void remove() {
            throw new RuntimeException("parameter names are read-only");
          }
        };
      }
      //@Override
      public Object getExtraParameter(String name) {
        return GwtStatisticsEvent.this.getExtraParameter(name);
      }
    };
  }

  public static GwtStatisticsEvent fromEvent(StatisticsEvent event) {
    GwtStatisticsEvent result = fromEvent0(event.getModuleName(), event.getSubSystem(),
        event.getEventGroupKey(), event.getMillis());
    for (Iterator<String> it = event.getExtraParameterNames(); it.hasNext(); ) {
      String name = it.next();
      set(result, name, event.getExtraParameter(name));
    }
    return result;
  }

  private static native GwtStatisticsEvent fromEvent0(String moduleName, String subSystem,
      String eventGroup, double millis) /*-{
    var result = {
      moduleName: moduleName,
      subSystem: subSystem,
      evtGroup: eventGroup,
      millis: millis,
    };
    return result;
  }-*/;

  private static native void set(GwtStatisticsEvent event, String name, Object value) /*-{
    event[name] = value;
  }-*/;
TOP

Related Classes of org.waveprotocol.box.webclient.stat.gwtevent.GwtStatisticsEvent

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.