blob: 84133804179c99d9ec1eab71dad2a0fdf71fcf87 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 École Polytechnique de Montréal
*
* 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:
* Geneviève Bastien - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.internal.tmf.analysis.xml.ui.views;
import java.util.List;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.ui.module.TmfXmlAnalysisOutputSource;
import org.eclipse.tracecompass.tmf.analysis.xml.core.module.TmfXmlStrings;
import org.eclipse.tracecompass.tmf.analysis.xml.core.module.TmfXmlUtils;
import org.w3c.dom.Element;
/**
* Class that manages information about a view: its title, the file, etc.
*
* @author Geneviève Bastien
*/
@NonNullByDefault
public class XmlViewInfo extends AbstractXmlViewInfo {
private static final String XML_VIEW_ID_PROPERTY = "XmlViewId"; //$NON-NLS-1$
private static final String XML_VIEW_FILE_PROPERTY = "XmlViewFile"; //$NON-NLS-1$
/** This is the ID of the view described in the XML file */
private @Nullable String fId = null;
private @Nullable String fFilePath = null;
// If true, properties were set but not saved to persistent storage
private boolean fIsDirty = false;
/**
* Constructor
*
* @param viewId
* The ID of the view
*/
public XmlViewInfo(String viewId) {
super(viewId);
/* Cannot get the properties yet, need to wait for the name */
}
/**
* Set the data for this view and retrieves from it the view ID and the file
* path of the XML element this view uses.
*
* @param data
* A string of the form "XML view ID" +
* {@link TmfXmlAnalysisOutputSource#DATA_SEPARATOR} +
* "path of the file containing the XML element"
*/
@Override
public synchronized void setViewData(String data) {
String[] idFile = data.split(TmfXmlAnalysisOutputSource.DATA_SEPARATOR);
fId = (idFile.length > 0) ? idFile[0] : null;
fFilePath = (idFile.length > 1) ? idFile[1] : null;
String viewName = getName();
if (viewName != null) {
savePersistentData();
} else {
fIsDirty = true;
}
}
@Override
public synchronized void setName(String name) {
super.setName(name);
if (fIsDirty) {
savePersistentData();
} else {
IDialogSettings settings = getPersistentPropertyStore();
fId = settings.get(XML_VIEW_ID_PROPERTY);
fFilePath = settings.get(XML_VIEW_FILE_PROPERTY);
}
}
@Override
protected void savePersistentData() {
IDialogSettings settings = getPersistentPropertyStore();
settings.put(XML_VIEW_ID_PROPERTY, fId);
settings.put(XML_VIEW_FILE_PROPERTY, fFilePath);
}
/**
* Retrieve the XML element corresponding to the view
*
* @param xmlTag
* The XML tag corresponding to the view element (the type of
* view)
* @return The view {@link Element}
*/
public @Nullable Element getViewElement(String xmlTag) {
String id = fId;
if (id == null) {
return null;
}
Element viewElement = TmfXmlUtils.getElementInFile(fFilePath, xmlTag, id);
return viewElement;
}
/**
* Get the view title from the header information of the XML view element.
*
* @param viewElement
* The XML view element from which to get the title
* @return The view title
*/
public @Nullable String getViewTitle(Element viewElement) {
List<Element> heads = TmfXmlUtils.getChildElements(viewElement, TmfXmlStrings.HEAD);
String title = null;
if (!heads.isEmpty()) {
Element head = heads.get(0);
/* Set the title of this view from the label in the header */
List<Element> labels = TmfXmlUtils.getChildElements(head, TmfXmlStrings.LABEL);
for (Element label : labels) {
if (!label.getAttribute(TmfXmlStrings.VALUE).isEmpty()) {
title = label.getAttribute(TmfXmlStrings.VALUE);
}
break;
}
}
return title;
}
}