1e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin/*
2e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin * Copyright (C) 2012 Google Inc.
3e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin *
4e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License");
5e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin * you may not use this file except in compliance with the License.
6e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin * You may obtain a copy of the License at
7e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin *
8e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0
9e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin *
10e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin * Unless required by applicable law or agreed to in writing, software
11e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS,
12e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin * See the License for the specific language governing permissions and
14e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin * limitations under the License.
15e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin */
16e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin
17e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffinpackage com.google.caliper.bridge;
18e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin
19e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffinimport static com.google.common.base.Preconditions.checkNotNull;
20e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin
21e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffinimport com.google.common.base.Throwables;
22e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin
23e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffinimport java.io.Serializable;
24e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin
25e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin/**
26e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin * A message containing information on a failure encountered by the worker JVM.
27e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin */
28e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffinpublic class FailureLogMessage extends LogMessage implements Serializable {
29e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  private static final long serialVersionUID = 1L;
30e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin
31e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  private final String stackTrace;
32e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin
33e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  public FailureLogMessage(Throwable e) {
34e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin    this(Throwables.getStackTraceAsString(e));
35e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  }
36e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin
37e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  public FailureLogMessage(String stackTrace) {
38e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin    this.stackTrace = checkNotNull(stackTrace);
39e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  }
40e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin
41e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  public String stackTrace() {
42e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin    return stackTrace;
43e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  }
44e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin
45e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  @Override
46e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  public void accept(LogMessageVisitor visitor) {
47e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin    visitor.visit(this);
48e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  }
49e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin
50e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  @Override
51e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  public int hashCode() {
52e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin    return stackTrace.hashCode();
53e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  }
54e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin
55e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  @Override
56e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  public boolean equals(Object obj) {
57e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin    if (obj == this) {
58e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin      return true;
59e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin    } else if (obj instanceof FailureLogMessage) {
60e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin      FailureLogMessage that = (FailureLogMessage) obj;
61e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin      return this.stackTrace.equals(that.stackTrace);
62e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin    } else {
63e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin      return false;
64e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin    }
65e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin  }
66e236301e5fc778bffe1748ed80d7936e6c807012Paul Duffin}
67