ss: Replace AttributeNotFoundException with IOOBE for quark parameters
[deliverable/tracecompass.git] / statesystem / org.eclipse.tracecompass.statesystem.core / src / org / eclipse / tracecompass / statesystem / core / backend / IStateHistoryBackend.java
1 /*******************************************************************************
2 * Copyright (c) 2012, 2014 Ericsson
3 * Copyright (c) 2010, 2011 École Polytechnique de Montréal
4 * Copyright (c) 2010, 2011 Alexandre Montplaisir <alexandre.montplaisir@gmail.com>
5 *
6 * All rights reserved. This program and the accompanying materials are
7 * made available under the terms of the Eclipse Public License v1.0 which
8 * accompanies this distribution, and is available at
9 * http://www.eclipse.org/legal/epl-v10.html
10 *
11 *******************************************************************************/
12
13 package org.eclipse.tracecompass.statesystem.core.backend;
14
15 import java.io.File;
16 import java.io.FileInputStream;
17 import java.io.PrintWriter;
18 import java.util.List;
19
20 import org.eclipse.jdt.annotation.NonNull;
21 import org.eclipse.jdt.annotation.Nullable;
22 import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException;
23 import org.eclipse.tracecompass.statesystem.core.exceptions.TimeRangeException;
24 import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
25 import org.eclipse.tracecompass.statesystem.core.statevalue.ITmfStateValue;
26
27 /**
28 * The main difference between StateSystem and StateHistorySystem is that SHS
29 * allows 'seeking' back in time to reload a Current State at a previous time.
30 * "How to go back in time" is defined by the implementation of the
31 * HistoryBackend.
32 *
33 * A StateHistorySystem contains one and only one HistoryBackend. If you want to
34 * use a paradigm with more than one provider (eg. more or less precision
35 * depending on what's asked by the user), implement one wrapper HistoryBackend
36 * which can then contain your 2-3 other backends underneath.
37 *
38 * @author Alexandre Montplaisir
39 */
40 public interface IStateHistoryBackend {
41
42 /**
43 * Get the ID of the state system that populates this backend.
44 *
45 * @return The state system's ID.
46 * @since 1.0
47 */
48 @NonNull String getSSID();
49
50 /**
51 * Get the start time of this state history. This is usually the same as the
52 * start time of the originating trace.
53 *
54 * @return The start time
55 */
56 long getStartTime();
57
58 /**
59 * Get the current end time of the state history. It will change as the
60 * history is being built.
61 *
62 * @return The end time
63 */
64 long getEndTime();
65
66 /**
67 * Main method to insert state intervals into the history.
68 *
69 * @param stateStartTime
70 * The start time of the interval
71 * @param stateEndTime
72 * The end time of the interval
73 * @param quark
74 * The quark of the attribute this interval refers to
75 * @param value
76 * The StateValue represented by this interval
77 * @throws TimeRangeException
78 * If the start or end time are invalid
79 */
80 // FIXME change to IStateInterval?
81 void insertPastState(long stateStartTime, long stateEndTime,
82 int quark, @NonNull ITmfStateValue value) throws TimeRangeException;
83
84 /**
85 * Indicate to the provider that we are done building the history (so it can
86 * close off, stop threads, etc.)
87 *
88 * @param endTime
89 * The end time to assign to this state history. It could be
90 * farther in time than the last state inserted, for example.
91 * @throws TimeRangeException
92 * If the requested time makes no sense.
93 */
94 void finishedBuilding(long endTime) throws TimeRangeException;
95
96 /**
97 * It is the responsibility of the backend to define where to save the
98 * Attribute Tree (since it's only useful to "reopen" an Attribute Tree if
99 * we have the matching History).
100 *
101 * This method defines where to read for the attribute tree when opening an
102 * already-existing history. Refer to the file format documentation.
103 *
104 * @return A FileInputStream object pointing to the correct file/location in
105 * the file where to read the attribute tree information.
106 */
107 FileInputStream supplyAttributeTreeReader();
108
109 // FIXME change to FOS too?
110 /**
111 * Supply the File object to which we will write the attribute tree. The
112 * position in this file is supplied by -TreeWriterFilePosition.
113 *
114 * @return The target File
115 */
116 File supplyAttributeTreeWriterFile();
117
118 /**
119 * Supply the position in the file where we should write the attribute tree
120 * when asked to.
121 *
122 * @return The file position (we will seek() to it)
123 */
124 long supplyAttributeTreeWriterFilePosition();
125
126 /**
127 * Delete any generated files or anything that might have been created by
128 * the history backend (either temporary or save files). By calling this, we
129 * return to the state as it was before ever building the history.
130 *
131 * You might not want to call automatically if, for example, you want an
132 * index file to persist on disk. This could be limited to actions
133 * originating from the user.
134 */
135 void removeFiles();
136
137 /**
138 * Notify the state history back-end that the trace is being closed, so it
139 * should release its file descriptors, close its connections, etc.
140 */
141 void dispose();
142
143 // ------------------------------------------------------------------------
144 // Query methods
145 // ------------------------------------------------------------------------
146
147 /**
148 * Complete "give me the state at a given time" method 'currentStateInfo' is
149 * an "out" parameter, that is, write to it the needed information and
150 * return. DO NOT 'new' currentStateInfo, it will be lost and nothing will
151 * be returned!
152 *
153 * @param currentStateInfo
154 * List of StateValues (index == quark) to fill up
155 * @param t
156 * Target timestamp of the query
157 * @throws TimeRangeException
158 * If the timestamp is outside of the history/trace
159 * @throws StateSystemDisposedException
160 * If the state system is disposed while a request is ongoing.
161 */
162 void doQuery(@NonNull List<@Nullable ITmfStateInterval> currentStateInfo, long t)
163 throws TimeRangeException, StateSystemDisposedException;
164
165 /**
166 * Some providers might want to specify a different way to obtain just a
167 * single StateValue instead of updating the whole list. If the method to
168 * use is the same, then feel free to just implement this as a wrapper using
169 * doQuery().
170 *
171 * @param t
172 * The target timestamp of the query.
173 * @param attributeQuark
174 * The single attribute for which you want the state interval
175 * @return The state interval matching this timestamp/attribute pair, or
176 * null if it was not found
177 * @throws TimeRangeException
178 * If the timestamp was invalid
179 * @throws StateSystemDisposedException
180 * If the state system is disposed while a request is ongoing.
181 */
182 ITmfStateInterval doSingularQuery(long t, int attributeQuark)
183 throws TimeRangeException, StateSystemDisposedException;
184
185 /**
186 * Debug method to print the contents of the history backend.
187 *
188 * @param writer
189 * The PrintWriter where to write the output
190 */
191 void debugPrint(PrintWriter writer);
192 }
This page took 0.03656 seconds and 5 git commands to generate.