-
Notifications
You must be signed in to change notification settings - Fork 11
/
TraceTypeHelper.java
226 lines (204 loc) · 6.38 KB
/
TraceTypeHelper.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
/*******************************************************************************
* Copyright (c) 2013, 2015 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Matthew Khouzam - Initial API and implementation
* Bernd Hufmann - Handling of directory traces types
* Geneviève Bastien - Added support of experiment types
* Patrick Tasse - Renamed trace type id
*******************************************************************************/
package org.eclipse.tracecompass.tmf.core.project.model;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType.TraceElementType;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus;
import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
/**
* TraceTypeHelper, a helper that can link a few names to a configuration element
* and a trace
*
* @author Matthew Khouzam
*/
public class TraceTypeHelper {
private static final String SEP = " : "; //$NON-NLS-1$
private final String fName;
private final String fCategoryName;
private final @NonNull String fTraceTypeId;
private final TraceElementType fElementType;
private final @NonNull ITmfTrace fTrace;
private final boolean fIsDirectory;
private boolean fEnable;
/**
* Constructor for a trace type helper. It is a link between a trace type
* id, a category name, a name and a trace object.
*
* @param traceTypeId
* the trace type id
* @param categoryName
* the category of the trace type
* @param name
* the name of the trace type
* @param trace
* an object of the trace type
* @param isDir
* flag indicating whether the trace type is for a directory or
* file trace
* @param elementType
* True if this helper is for an experiment type
*/
public TraceTypeHelper(String traceTypeId, String categoryName, String name, @NonNull ITmfTrace trace, boolean isDir, TraceElementType elementType) {
fName = name;
fCategoryName = categoryName;
fTraceTypeId = traceTypeId;
fTrace = trace;
fIsDirectory = isDir;
fElementType = elementType;
fEnable = true;
}
/**
* Get the name
*
* @return the name
*/
public String getName() {
return fName;
}
/**
* Get the category name
*
* @return the category name
*/
public String getCategoryName() {
return fCategoryName;
}
/**
* Get the trace type label "category : name".
*
* @return the trace type label
*/
public String getLabel() {
if (fCategoryName.isEmpty()) {
return fName;
}
return fCategoryName + SEP + fName;
}
/**
* Get the trace type id
*
* @return the trace type id
*/
public @NonNull String getTraceTypeId() {
return fTraceTypeId;
}
/**
* Is the trace of this type?
*
* @param path
* the trace to validate
* @return whether it passes the validation
*/
public IStatus validate(String path) {
return fTrace.validate(null, path);
}
/**
* Validate a trace against this trace type with confidence level
*
* @param path
* the trace to validate
* @return the confidence level (0 is lowest) or -1 if validation fails
*/
public int validateWithConfidence(String path) {
IStatus status = fTrace.validate(null, path);
return getConfidenceFromStatus(status);
}
/**
* Validate an experiment against this experiment type with confidence level
*
* @param traces
* list of traces belonging to the experiment
* @return the confidence level (0 is lowest), or -1 if validation fails or
* trace is not an experiment
* @since 8.4
*/
public int validateExperimentWithTraces(List<ITmfTrace> traces) {
if (!isExperimentType()) {
return -1;
}
TmfExperiment exp = (TmfExperiment) fTrace;
IStatus status = exp.validateWithTraces(traces);
return getConfidenceFromStatus(status);
}
private static int getConfidenceFromStatus(IStatus status) {
int result = -1;
if (status.getSeverity() != IStatus.ERROR) {
result = 0;
if (status instanceof TraceValidationStatus) {
result = ((TraceValidationStatus) status).getConfidence();
}
}
return result;
}
/**
* Get an object of the trace type
* @return an object of the trace type
*/
public ITmfTrace getTrace() {
return fTrace;
}
/**
* Return whether this helper applies to a trace type or experiment type
*
* @return True if experiment type, false otherwise
*/
public boolean isExperimentType() {
return fElementType == TraceElementType.EXPERIMENT;
}
/**
* Get the class associated with this trace type
*
* @return The trace class
*/
public Class<@NonNull ? extends ITmfTrace> getTraceClass() {
return fTrace.getClass();
}
/**
* Returns whether trace type is for a directory trace or a single file trace
* @return <code>true</code> if trace type is for a directory trace else <code>false</code>
*/
public boolean isDirectoryTraceType() {
return fIsDirectory;
}
/**
* Test whether the trace helper is enabled based on the trace type
* preferences or not
*
* @return True if the trace helper is enabled, false otherwise
* @since 3.0
*/
public boolean isEnabled() {
return fEnable;
}
/**
* Enable/disable the trace type helper
*
* @param enable
* the new enable state
* @since 3.0
*/
public void setEnabled(boolean enable) {
fEnable = enable;
}
@Override
public String toString() {
return fName;
}
}