Merge branch 'master'
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.core / src / org / eclipse / linuxtools / tmf / core / trace / TmfCheckpoint.java
1 /*******************************************************************************
2 * Copyright (c) 2009, 2012 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Francois Chouinard - Initial API and implementation
11 * Francois Chouinard - Updated as per TMF Trace Model 1.0
12 ******************************************************************************/
13
14 package org.eclipse.linuxtools.tmf.core.trace;
15
16 import org.eclipse.linuxtools.tmf.core.event.ITmfTimestamp;
17
18 /**
19 * A basic implementation of ITmfCheckpoint. It simply maps an event timestamp
20 * to a generic location.
21 *
22 * @version 1.0
23 * @author Francois Chouinard
24 *
25 * @see ITmfLocation
26 * @see ITmfTimestamp
27 */
28 public class TmfCheckpoint implements ITmfCheckpoint, Cloneable {
29
30 // ------------------------------------------------------------------------
31 // Attributes
32 // ------------------------------------------------------------------------
33
34 // The checkpoint location
35 private ITmfLocation<? extends Comparable<?>> fLocation;
36
37 // The checkpoint timestamp
38 private ITmfTimestamp fTimestamp;
39
40 // ------------------------------------------------------------------------
41 // Constructors
42 // ------------------------------------------------------------------------
43
44 /**
45 * Default constructor
46 */
47 @SuppressWarnings("unused")
48 private TmfCheckpoint() {
49 }
50
51 /**
52 * Full constructor
53 *
54 * @param timestamp the checkpoint timestamp
55 * @param location the corresponding trace location
56 */
57 public TmfCheckpoint(final ITmfTimestamp timestamp, final ITmfLocation<? extends Comparable<?>> location) {
58 fTimestamp = timestamp;
59 fLocation = location;
60 }
61
62 /**
63 * Copy constructor
64 *
65 * @param other the other checkpoint
66 */
67 public TmfCheckpoint(final TmfCheckpoint other) {
68 if (other == null) {
69 throw new IllegalArgumentException();
70 }
71 fTimestamp = other.fTimestamp;
72 fLocation = other.fLocation;
73 }
74
75 // ------------------------------------------------------------------------
76 // Cloneable
77 // ------------------------------------------------------------------------
78
79 /* (non-Javadoc)
80 * @see java.lang.Object#clone()
81 */
82 @Override
83 public TmfCheckpoint clone() {
84 TmfCheckpoint clone = null;
85 try {
86 clone = (TmfCheckpoint) super.clone();
87 clone.fLocation = (fLocation != null) ? fLocation.clone() : null;
88 clone.fTimestamp = (fTimestamp != null) ? fTimestamp.clone() : null;
89 } catch (final CloneNotSupportedException e) {
90 }
91 return clone;
92 }
93
94 // ------------------------------------------------------------------------
95 // ITmfCheckpoint
96 // ------------------------------------------------------------------------
97
98 /* (non-Javadoc)
99 * @see org.eclipse.linuxtools.tmf.core.trace.ITmfCheckpoint#getTimestamp()
100 */
101 @Override
102 public ITmfTimestamp getTimestamp() {
103 return fTimestamp;
104 }
105
106 /* (non-Javadoc)
107 * @see org.eclipse.linuxtools.tmf.core.trace.ITmfCheckpoint#getLocation()
108 */
109 @Override
110 public ITmfLocation<?> getLocation() {
111 return fLocation;
112 }
113
114 // ------------------------------------------------------------------------
115 // Comparable
116 // ------------------------------------------------------------------------
117
118 /* (non-Javadoc)
119 * @see org.eclipse.linuxtools.tmf.core.trace.ITmfCheckpoint#compareTo(org.eclipse.linuxtools.tmf.core.trace.ITmfCheckpoint)
120 *
121 * Compares the checkpoints timestamp. If either is null, compares the
122 * trace checkpoints locations.
123 */
124 @Override
125 @SuppressWarnings({ "unchecked", "rawtypes" })
126 public int compareTo(final ITmfCheckpoint other) {
127 if (fTimestamp == null || other.getTimestamp() == null) {
128 final Comparable location1 = fLocation.getLocation();
129 final Comparable location2 = other.getLocation().getLocation();
130 return location1.compareTo(location2);
131 }
132 return fTimestamp.compareTo(other.getTimestamp(), false);
133 }
134
135 // ------------------------------------------------------------------------
136 // Object
137 // ------------------------------------------------------------------------
138
139 /* (non-Javadoc)
140 * @see java.lang.Object#hashCode()
141 */
142 @Override
143 public int hashCode() {
144 final int prime = 31;
145 int result = 1;
146 result = prime * result + ((fLocation == null) ? 0 : fLocation.hashCode());
147 result = prime * result + ((fTimestamp == null) ? 0 : fTimestamp.hashCode());
148 return result;
149 }
150
151 /* (non-Javadoc)
152 * @see java.lang.Object#equals(java.lang.Object)
153 */
154 @Override
155 public boolean equals(final Object obj) {
156 if (this == obj) {
157 return true;
158 }
159 if (obj == null) {
160 return false;
161 }
162 if (!(obj instanceof TmfCheckpoint)) {
163 return false;
164 }
165 final TmfCheckpoint other = (TmfCheckpoint) obj;
166 if (fLocation == null) {
167 if (other.fLocation != null) {
168 return false;
169 }
170 } else if (!fLocation.equals(other.fLocation)) {
171 return false;
172 }
173 if (fTimestamp == null) {
174 if (other.fTimestamp != null) {
175 return false;
176 }
177 } else if (!fTimestamp.equals(other.fTimestamp)) {
178 return false;
179 }
180 return true;
181 }
182
183 /* (non-Javadoc)
184 * @see java.lang.Object#toString()
185 */
186 @Override
187 @SuppressWarnings("nls")
188 public String toString() {
189 return "TmfCheckpoint [fLocation=" + fLocation + ", fTimestamp=" + fTimestamp + "]";
190 }
191
192 }
This page took 0.036209 seconds and 6 git commands to generate.