1/*
2 * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package jdk.nashorn.internal.runtime.events;
27
28import java.util.logging.Level;
29import jdk.nashorn.internal.objects.NativeDebug;
30import jdk.nashorn.internal.runtime.options.Options;
31
32/**
33 * Class for representing a runtime event, giving less global dependencies than logger.
34 * Every {@link NativeDebug} object keeps a queue of RuntimeEvents that can be explored
35 * through the debug API.
36 *
37 * @param <T> class of the value this event wraps
38 */
39public class RuntimeEvent<T> {
40    /** Queue size for the runtime event buffer */
41    public static final int RUNTIME_EVENT_QUEUE_SIZE = Options.getIntProperty("nashorn.runtime.event.queue.size", 1024);
42
43    private final Level level;
44    private final T value;
45
46    /**
47     * Constructor
48     *
49     * @param level  log level for runtime event to create
50     * @param object object to wrap
51     */
52    public RuntimeEvent(final Level level, final T object) {
53        this.level = level;
54        this.value = object;
55    }
56
57    /**
58     * Return the value wrapped in this runtime event
59     * @return value
60     */
61    public final T getValue() {
62        return value;
63    }
64
65    @Override
66    public String toString() {
67        final StringBuilder sb = new StringBuilder();
68
69        sb.append('[').
70            append(level).
71            append("] ").
72            append(value == null ? "null" : getValueClass().getSimpleName()).
73            append(" value=").
74            append(value);
75
76        return sb.toString();
77    }
78
79    /**
80     * Descriptor for this runtime event, must be overridden and
81     * implemented, e.g. "RewriteException"
82     * @return event name
83     */
84    public final Class<?> getValueClass() {
85        return value.getClass();
86    }
87}
88