package com.linkedin.parseq.trace; import java.io.IOException; import java.util.Collections; import java.util.Map; import java.util.Set; public class Trace { private final Map<Long, ShallowTrace> _traceMap; private final Set<TraceRelationship> _relationships; private final Long _planId; private final String _planClass; // TODO: this constructor should be removed. // Need to fix in the next major version release. public Trace(Map<Long, ShallowTrace> traceMap, Set<TraceRelationship> relationships) { this(traceMap, relationships, TraceBuilder.UNKNOWN_PLAN_CLASS, TraceBuilder.UNKNOWN_PLAN_ID); } public Trace(Map<Long, ShallowTrace> traceMap, Set<TraceRelationship> relationships, String planClass, Long planId) { _traceMap = Collections.unmodifiableMap(traceMap); _relationships = Collections.unmodifiableSet(relationships); _planClass = planClass; _planId = planId; } public Map<Long, ShallowTrace> getTraceMap() { return _traceMap; } public Set<TraceRelationship> getRelationships() { return _relationships; } // TODO: this method should be removed. // Need to fix in the next major version release. public static Trace single(ShallowTrace shallowTrace) { return single(shallowTrace, TraceBuilder.UNKNOWN_PLAN_CLASS, TraceBuilder.UNKNOWN_PLAN_ID); } public static Trace single(ShallowTrace shallowTrace, String planClass, Long planId) { return new Trace(Collections.singletonMap(shallowTrace.getId(), shallowTrace), Collections.emptySet(), planClass, planId); } public Long getPlanId() { return _planId; } public String getPlanClass() { return _planClass; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((_relationships == null) ? 0 : _relationships.hashCode()); result = prime * result + ((_traceMap == null) ? 0 : _traceMap.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Trace other = (Trace) obj; if (_relationships == null) { if (other._relationships != null) return false; } else if (!_relationships.equals(other._relationships)) return false; if (_traceMap == null) { if (other._traceMap != null) return false; } else if (!_traceMap.equals(other._traceMap)) return false; return true; } @Override public String toString() { try { return TraceUtil.getJsonTrace(this); } catch (IOException e) { throw new RuntimeException("Could not serialize trace to JSON", e); } } }