/**
* 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;
}-*/;
}