Remove unneeded checkNotNull() calls
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.analysis.xml.core / src / org / eclipse / tracecompass / tmf / analysis / xml / core / module / TmfAnalysisModuleHelperXml.java
CommitLineData
97ed0cf0 1/*******************************************************************************
0dcf01f1 2 * Copyright (c) 2014, 2016 École Polytechnique de Montréal
97ed0cf0
FW
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
97ed0cf0
FW
8 *******************************************************************************/
9
0dcf01f1 10package org.eclipse.tracecompass.tmf.analysis.xml.core.module;
97ed0cf0
FW
11
12import java.io.File;
63c43609 13import java.util.Collections;
145efc1f 14import java.util.HashMap;
aa89118c 15import java.util.List;
145efc1f 16import java.util.Map;
97ed0cf0
FW
17
18import org.eclipse.core.runtime.Path;
54eae41f 19import org.eclipse.jdt.annotation.NonNull;
145efc1f 20import org.eclipse.tracecompass.common.core.NonNullUtils;
0dcf01f1 21import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.Activator;
2bdf0193
AM
22import org.eclipse.tracecompass.tmf.analysis.xml.core.stateprovider.TmfXmlStrings;
23import org.eclipse.tracecompass.tmf.analysis.xml.core.stateprovider.XmlStateSystemModule;
24import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
25import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModuleHelper;
26import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisManager;
27import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisRequirement;
28import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
145efc1f 29import org.eclipse.tracecompass.tmf.core.project.model.ITmfPropertiesProvider;
2bdf0193
AM
30import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType;
31import org.eclipse.tracecompass.tmf.core.project.model.TraceTypeHelper;
32import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
97ed0cf0
FW
33import org.osgi.framework.Bundle;
34import org.w3c.dom.Element;
97ed0cf0
FW
35
36/**
37 * Analysis module helpers for modules provided by XML files
38 *
39 * @author Geneviève Bastien
0dcf01f1 40 * @since 2.0
97ed0cf0 41 */
145efc1f 42public class TmfAnalysisModuleHelperXml implements IAnalysisModuleHelper, ITmfPropertiesProvider {
97ed0cf0
FW
43
44 /**
45 * The types of analysis that can be XML-defined
46 */
47 public enum XmlAnalysisModuleType {
48 /** Analysis will be of type XmlStateSystemModule */
49 STATE_SYSTEM
50 }
51
52 private final File fSourceFile;
53 private final Element fSourceElement;
54 private final XmlAnalysisModuleType fType;
97ed0cf0
FW
55
56 /**
57 * Constructor
58 *
59 * @param xmlFile
60 * The XML file containing the details of this analysis
61 * @param node
62 * The XML node element
63 * @param type
64 * The type of analysis
65 */
66 public TmfAnalysisModuleHelperXml(File xmlFile, Element node, XmlAnalysisModuleType type) {
67 fSourceFile = xmlFile;
68 fSourceElement = node;
69 fType = type;
97ed0cf0
FW
70 }
71
72 @Override
73 public String getId() {
ba27dd38
GB
74 /*
75 * The attribute ID cannot be null because the XML has been validated
76 * and it is mandatory
77 */
0e4f957e 78 return fSourceElement.getAttribute(TmfXmlStrings.ID);
97ed0cf0
FW
79 }
80
81 @Override
82 public String getName() {
aa89118c
GB
83 String name = null;
84 /* Label may be available in XML header */
85 List<Element> head = XmlUtils.getChildElements(fSourceElement, TmfXmlStrings.HEAD);
86 if (head.size() == 1) {
87 List<Element> labels = XmlUtils.getChildElements(head.get(0), TmfXmlStrings.LABEL);
88 if (!labels.isEmpty()) {
89 name = labels.get(0).getAttribute(TmfXmlStrings.VALUE);
90 }
91 }
92
97ed0cf0
FW
93 if (name == null) {
94 name = getId();
95 }
96 return name;
97 }
98
99 @Override
100 public boolean isAutomatic() {
101 return false;
102 }
103
ff7b95a5
GB
104 /**
105 * @since 1.0
106 */
107 @Override
108 public boolean appliesToExperiment() {
109 return false;
110 }
111
97ed0cf0
FW
112 @Override
113 public String getHelpText() {
ab9ca7ea 114 return ""; //$NON-NLS-1$
97ed0cf0
FW
115 }
116
54eae41f
GB
117 @Override
118 public String getHelpText(@NonNull ITmfTrace trace) {
119 return ""; //$NON-NLS-1$
120 }
121
97ed0cf0
FW
122 @Override
123 public String getIcon() {
124 return null;
125 }
126
127 @Override
128 public Bundle getBundle() {
129 return Activator.getDefault().getBundle();
130 }
131
132 @Override
aa89118c 133 public boolean appliesToTraceType(Class<? extends ITmfTrace> traceClass) {
97ed0cf0 134 /* Trace types may be available in XML header */
aa89118c
GB
135 List<Element> head = XmlUtils.getChildElements(fSourceElement, TmfXmlStrings.HEAD);
136 if (head.size() != 1) {
137 return true;
138 }
139 /*
140 * TODO: Test with custom trace types
141 */
142 List<Element> elements = XmlUtils.getChildElements(head.get(0), TmfXmlStrings.TRACETYPE);
143 if (elements.isEmpty()) {
97ed0cf0
FW
144 return true;
145 }
146
aa89118c
GB
147 for (Element element : elements) {
148 String traceTypeId = element.getAttribute(TmfXmlStrings.ID);
e86f7ac4 149 traceTypeId = TmfTraceType.buildCompatibilityTraceTypeId(traceTypeId);
a4a116c3 150 TraceTypeHelper helper = TmfTraceType.getTraceType(traceTypeId);
aa89118c
GB
151 if ((helper != null) && helper.getTrace().getClass().isAssignableFrom(traceClass)) {
152 return true;
153 }
154 }
155 return false;
97ed0cf0
FW
156 }
157
63c43609
MR
158 @Override
159 public Iterable<Class<? extends ITmfTrace>> getValidTraceTypes() {
160 return Collections.EMPTY_SET;
161 }
162
163 @Override
164 public Iterable<TmfAnalysisRequirement> getAnalysisRequirements() {
165 return Collections.EMPTY_SET;
166 }
167
97ed0cf0
FW
168 @Override
169 public IAnalysisModule newModule(ITmfTrace trace) throws TmfAnalysisException {
170 String analysisid = getId();
171 IAnalysisModule module = null;
172 switch (fType) {
173 case STATE_SYSTEM:
174 module = new XmlStateSystemModule();
175 XmlStateSystemModule ssModule = (XmlStateSystemModule) module;
176 module.setId(analysisid);
177 ssModule.setXmlFile(new Path(fSourceFile.getAbsolutePath()));
178
048bde85
GB
179 /*
180 * FIXME: There is no way to know if a module is automatic, so we
181 * default to true
182 */
183 ssModule.setAutomatic(true);
97ed0cf0 184
97ed0cf0
FW
185 break;
186 default:
187 break;
188
189 }
190 if (module != null) {
f479550c
GB
191 if (module.setTrace(trace)) {
192 TmfAnalysisManager.analysisModuleCreated(module);
193 } else {
194 /* The analysis does not apply to the trace, dispose of the module */
195 module.dispose();
196 module = null;
197 }
97ed0cf0
FW
198 }
199
200 return module;
201 }
202
145efc1f
GB
203 // ------------------------------------------------------------------------
204 // ITmfPropertiesProvider
205 // ------------------------------------------------------------------------
206
207 @Override
208 public @NonNull Map<@NonNull String, @NonNull String> getProperties() {
209 Map<@NonNull String, @NonNull String> properties = new HashMap<>();
210 properties.put(NonNullUtils.checkNotNull(Messages.XmlModuleHelper_PropertyFile), fSourceFile.getName());
211 properties.put(NonNullUtils.checkNotNull(Messages.XmlModuleHelper_PropertyType), fType.name());
212 return properties;
213 }
214
97ed0cf0 215}
This page took 0.074183 seconds and 5 git commands to generate.