/******************************************************************************* * Copyright (c) 2009, 2013 Ericsson * * All rights reserved. This program and the accompanying materials are made * available under the terms of the Eclipse Public License v1.0 which * accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Francois Chouinard - Initial API and implementation * Francois Chouinard - Updated as per TMF Event Model 1.0 * Alexandre Montplaisir - Made immutable *******************************************************************************/ package fr.inria.linuxtools.tmf.core.event; import org.eclipse.core.runtime.PlatformObject; import fr.inria.linuxtools.tmf.core.timestamp.ITmfTimestamp; import fr.inria.linuxtools.tmf.core.trace.ITmfContext; import fr.inria.linuxtools.tmf.core.trace.ITmfTrace; /** * A basic implementation of ITmfEvent. * * @version 1.0 * @author Francois Chouinard * * @see ITmfTimestamp * @see ITmfEventType * @see ITmfEventField * @see ITmfTrace */ public class TmfEvent extends PlatformObject implements ITmfEvent { // ------------------------------------------------------------------------ // Attributes // ------------------------------------------------------------------------ private final ITmfTrace fTrace; private final long fRank; private final ITmfTimestamp fTimestamp; private final String fSource; private final ITmfEventType fType; private final ITmfEventField fContent; private final String fReference; // ------------------------------------------------------------------------ // Constructors // ------------------------------------------------------------------------ /** * Default constructor. All fields have their default value (null) and the * event rank is set to TmfContext.UNKNOWN_RANK. */ public TmfEvent() { this(null, ITmfContext.UNKNOWN_RANK, null, null, null, null, null); } /** * Standard constructor. The event rank will be set to TmfContext.UNKNOWN_RANK. * * @param trace the parent trace * @param timestamp the event timestamp * @param source the event source * @param type the event type * @param content the event content (payload) * @param reference the event reference * @since 2.0 */ public TmfEvent(final ITmfTrace trace, final ITmfTimestamp timestamp, final String source, final ITmfEventType type, final ITmfEventField content, final String reference) { this(trace, ITmfContext.UNKNOWN_RANK, timestamp, source, type, content, reference); } /** * Full constructor * * @param trace the parent trace * @param rank the event rank (in the trace) * @param timestamp the event timestamp * @param source the event source * @param type the event type * @param content the event content (payload) * @param reference the event reference * @since 2.0 */ public TmfEvent(final ITmfTrace trace, final long rank, final ITmfTimestamp timestamp, final String source, final ITmfEventType type, final ITmfEventField content, final String reference) { fTrace = trace; fRank = rank; fTimestamp = timestamp; fSource = source; fType = type; fContent = content; fReference = reference; } /** * Copy constructor * * @param event the original event */ public TmfEvent(final ITmfEvent event) { if (event == null) { throw new IllegalArgumentException(); } fTrace = event.getTrace(); fRank = event.getRank(); fTimestamp = event.getTimestamp(); fSource = event.getSource(); fType = event.getType(); fContent = event.getContent(); fReference = event.getReference(); } // ------------------------------------------------------------------------ // ITmfEvent // ------------------------------------------------------------------------ @Override public ITmfTrace getTrace() { return fTrace; } @Override public long getRank() { return fRank; } /** * @since 2.0 */ @Override public ITmfTimestamp getTimestamp() { return fTimestamp; } @Override public String getSource() { return fSource; } @Override public ITmfEventType getType() { return fType; } @Override public ITmfEventField getContent() { return fContent; } @Override public String getReference() { return fReference; } // ------------------------------------------------------------------------ // Object // ------------------------------------------------------------------------ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((fTrace == null) ? 0 : fTrace.hashCode()); result = prime * result + (int) (fRank ^ (fRank >>> 32)); result = prime * result + ((fTimestamp == null) ? 0 : fTimestamp.hashCode()); result = prime * result + ((fSource == null) ? 0 : fSource.hashCode()); result = prime * result + ((fType == null) ? 0 : fType.hashCode()); result = prime * result + ((fContent == null) ? 0 : fContent.hashCode()); result = prime * result + ((fReference == null) ? 0 : fReference.hashCode()); return result; } @Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof TmfEvent)) { return false; } final TmfEvent other = (TmfEvent) obj; if (fTrace == null) { if (other.fTrace != null) { return false; } } else if (!fTrace.equals(other.fTrace)) { return false; } if (fRank != other.fRank) { return false; } if (fTimestamp == null) { if (other.fTimestamp != null) { return false; } } else if (!fTimestamp.equals(other.fTimestamp)) { return false; } if (fSource == null) { if (other.fSource != null) { return false; } } else if (!fSource.equals(other.fSource)) { return false; } if (fType == null) { if (other.fType != null) { return false; } } else if (!fType.equals(other.fType)) { return false; } if (fContent == null) { if (other.fContent != null) { return false; } } else if (!fContent.equals(other.fContent)) { return false; } if (fReference == null) { if (other.fReference != null) { return false; } } else if (!fReference.equals(other.fReference)) { return false; } return true; } @Override @SuppressWarnings("nls") public String toString() { return getClass().getSimpleName() + " [fTimestamp=" + getTimestamp() + ", fTrace=" + getTrace() + ", fRank=" + getRank() + ", fSource=" + getSource() + ", fType=" + getType() + ", fContent=" + getContent() + ", fReference=" + getReference() + "]"; } }