+/*******************************************************************************
+ * Copyright (c) 2009, 2014 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
+ * Patrick Tasse - Support selection range
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.tmf.core.signal;
+
+import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
+
+/**
+ * A new time range selection has been made.
+ *
+ * This is the selected time or time range. A single-timestamp selection is
+ * represented by a range where the start time is equal to the end time.
+ *
+ * To update the visible (zoom) range instead, use
+ * {@link TmfWindowRangeUpdatedSignal}.
+ *
+ * @author Francois Chouinard
+ * @since 1.0
+ */
+@NonNullByDefault
+public class TmfSelectionRangeUpdatedSignal extends TmfSignal {
+
+ private final ITmfTimestamp fBeginTime;
+ private final ITmfTimestamp fEndTime;
+
+ /**
+ * Constructor for a single timestamp selection (start and end times will be
+ * the same).
+ *
+ * @param source
+ * Object sending this signal
+ * @param ts
+ * Timestamp of selection
+ */
+ public TmfSelectionRangeUpdatedSignal(@Nullable Object source, ITmfTimestamp ts) {
+ super(source);
+ fBeginTime = ts;
+ fEndTime = ts;
+ }
+
+ /**
+ * Constructor for a time range selection.
+ *
+ * @param source
+ * Object sending this signal
+ * @param begin
+ * Timestamp of begin of selection range
+ * @param end
+ * Timestamp of end of selection range
+ */
+ public TmfSelectionRangeUpdatedSignal(@Nullable Object source, ITmfTimestamp begin, ITmfTimestamp end) {
+ super(source);
+ fBeginTime = begin;
+ fEndTime = end;
+ }
+
+ /**
+ * @return The begin timestamp of selection
+ */
+ public ITmfTimestamp getBeginTime() {
+ return fBeginTime;
+ }
+
+ /**
+ * @return The end timestamp of selection
+ */
+ public ITmfTimestamp getEndTime() {
+ return fEndTime;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(getClass().getSimpleName());
+ sb.append(" ["); //$NON-NLS-1$
+ sb.append(fBeginTime.toString());
+ if (!fBeginTime.equals(fEndTime)) {
+ sb.append('-');
+ sb.append(fEndTime.toString());
+ }
+ sb.append("]"); //$NON-NLS-1$
+ return checkNotNull(sb.toString());
+ }
+
+}