/**
* @return the trace logger log level
*/
- TraceJulLogLevel getLogLevel();
+ ITraceLogLevel getLogLevel();
/**
* Sets the trace logger log level to the given level
* @param level
* logger log level to set
*/
- void setLogLevel(TraceJulLogLevel level);
+ void setLogLevel(ITraceLogLevel level);
/**
* Sets the trace logger log level to the level specified by the given name.
--- /dev/null
+/**********************************************************************
+ * Copyright (c) 2016 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:
+ * Bruno Roy - Initial API and implementation
+ *********************************************************************/
+package org.eclipse.tracecompass.internal.lttng2.control.core.model;
+
+/**
+ * Log Level for Log4j enumeration.
+ *
+ * @author Bruno Roy
+ */
+@SuppressWarnings("nls")
+public enum TraceLog4jLogLevel implements ITraceLogLevel{
+
+ // ------------------------------------------------------------------------
+ // Enum definition
+ // ------------------------------------------------------------------------
+ /** Log level off */
+ LOG4J_OFF("Off"),
+ /** Log level fatal */
+ LOG4J_FATAL("Fatal"),
+ /** Log level error */
+ LOG4J_ERROR("Error"),
+ /** Log level warn */
+ LOG4J_WARN("Warn"),
+ /** Log level info */
+ LOG4J_INFO("Info"),
+ /** Log level debug */
+ LOG4J_DEBUG("Debug"),
+ /** Log level trace */
+ LOG4J_TRACE("Trace"),
+ /** Log level all */
+ LOG4J_ALL("All"),
+ /** Log level unknown */
+ LEVEL_UNKNOWN("LEVEL_UNKNOWN");
+
+
+ // ------------------------------------------------------------------------
+ // Attributes
+ // ------------------------------------------------------------------------
+ /**
+ * Name of enum.
+ */
+ private final String fInName;
+
+ // ------------------------------------------------------------------------
+ // Constuctors
+ // ------------------------------------------------------------------------
+
+ /**
+ * Private constructor
+ *
+ * @param name
+ * the name of state
+ */
+ private TraceLog4jLogLevel(String name) {
+ fInName = name;
+ }
+
+ // ------------------------------------------------------------------------
+ // Accessors
+ // ------------------------------------------------------------------------
+
+ @Override
+ public String getInName() {
+ return fInName;
+ }
+
+ // ------------------------------------------------------------------------
+ // Utility
+ // ------------------------------------------------------------------------
+ /**
+ * Return the corresponding {@link TraceLog4jLogLevel} to String "name"
+ *
+ * @param name
+ * String to compare to retrieve the good {@link TraceLog4jLogLevel}
+ * @return the corresponding {@link TraceLog4jLogLevel}
+ */
+ public static TraceLog4jLogLevel valueOfString(String name) {
+ if (name == null) {
+ throw new IllegalArgumentException();
+ }
+ for (TraceLog4jLogLevel tllevel : TraceLog4jLogLevel.values()) {
+ if (tllevel.name().equals(name)) {
+ return tllevel;
+ }
+ }
+ // No match
+ return LEVEL_UNKNOWN;
+ }
+}
package org.eclipse.tracecompass.internal.lttng2.control.core.model.impl;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.IBaseLoggerInfo;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.ITraceLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceJulLogLevel;
/**
* The trace log level.
*/
- private TraceJulLogLevel fLogLevel = TraceJulLogLevel.LEVEL_UNKNOWN;
+ private ITraceLogLevel fLogLevel = TraceJulLogLevel.LEVEL_UNKNOWN;
/**
* The logger domain.
*/
// ------------------------------------------------------------------------
@Override
- public TraceJulLogLevel getLogLevel() {
+ public ITraceLogLevel getLogLevel() {
return fLogLevel;
}
@Override
- public void setLogLevel(TraceJulLogLevel level) {
+ public void setLogLevel(ITraceLogLevel level) {
fLogLevel = level;
}
public void setDomain(TraceDomainType domain) {
fDomain = domain;
}
-
}
<command xmlns="http://lttng.org/xml/ns/lttng-mi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://lttng.org/xml/ns/lttng-mi http://lttng.org/xml/schemas/lttng-mi/3/lttng-mi-3.0.xsd" schemaVersion="3.0"><name>list</name><output><domains><domain><type>JUL</type><buffer_type>PER_PID</buffer_type><pids><pid><id>18275</id><name>java</name><events><event><name>anotherLogger</name><type>TRACEPOINT</type><enabled>true</enabled><loglevel>UNKNOWN</loglevel><loglevel_type>ALL</loglevel_type></event><event><name>logger</name><type>TRACEPOINT</type><enabled>true</enabled><loglevel>UNKNOWN</loglevel><loglevel_type>ALL</loglevel_type></event><event><name>global</name><type>TRACEPOINT</type><enabled>true</enabled><loglevel>UNKNOWN</loglevel><loglevel_type>ALL</loglevel_type></event></events></pid></pids></domain></domains></output></command>
</COMMAND_OUTPUT>
<COMMAND_INPUT>
+lttng --mi xml list -l
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command xmlns="http://lttng.org/xml/ns/lttng-mi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://lttng.org/xml/ns/lttng-mi http://lttng.org/xml/schemas/lttng-mi/3/lttng-mi-3.0.xsd" schemaVersion="3.0"><name>list</name><output><domains><domain><type>LOG4J</type><buffer_type>PER_PID</buffer_type><pids><pid><id>5600</id><name>java</name><events><event><name>Test</name><type>TRACEPOINT</type><enabled>true</enabled><loglevel>UNKNOWN</loglevel><loglevel_type>ALL</loglevel_type><exclusions/></event></events></pid></pids></domain></domains></output></command>
+</COMMAND_OUTPUT>
+<COMMAND_INPUT>
lttng --mi xml list
</COMMAND_INPUT>
<COMMAND_RESULT>
<command><name>list</name><output><domains><domain><type>JUL</type><buffer_type>PER_PID</buffer_type><pids><pid><id>18275</id><name>java</name><events><event><name>anotherLogger</name><type>TRACEPOINT</type><enabled>true</enabled><loglevel>UNKNOWN</loglevel><loglevel_type>ALL</loglevel_type></event><event><name>logger</name><type>TRACEPOINT</type><enabled>true</enabled><loglevel>UNKNOWN</loglevel><loglevel_type>ALL</loglevel_type></event><event><name>global</name><type>TRACEPOINT</type><enabled>true</enabled><loglevel>UNKNOWN</loglevel><loglevel_type>ALL</loglevel_type></event></events></pid></pids></domain></domains></output></command>
</COMMAND_OUTPUT>
<COMMAND_INPUT>
+lttng --mi xml list -l
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command><name>list</name><output><domains><domain><type>LOG4J</type><buffer_type>PER_PID</buffer_type><pids><pid><id>18332</id><name>java</name><events><event><name>Test</name><type>TRACEPOINT</type><enabled>true</enabled><filter>false</filter><loglevel>UNKNOWN</loglevel><loglevel_type>ALL</loglevel_type><exclusion>false</exclusion></event></events></pid></pids></domain></domains></output></command>
+</COMMAND_OUTPUT>
+<COMMAND_INPUT>
lttng --mi xml list
</COMMAND_INPUT>
<COMMAND_RESULT>
<command><name>list</name><output><domains><domain><type>JUL</type><buffer_type>PER_PID</buffer_type><pids><pid><id>18275</id><name>java</name><events><event><name>anotherLogger</name><type>TRACEPOINT</type><enabled>true</enabled><loglevel>UNKNOWN</loglevel><loglevel_type>ALL</loglevel_type></event><event><name>logger</name><type>TRACEPOINT</type><enabled>true</enabled><loglevel>UNKNOWN</loglevel><loglevel_type>ALL</loglevel_type></event><event><name>global</name><type>TRACEPOINT</type><enabled>true</enabled><loglevel>UNKNOWN</loglevel><loglevel_type>ALL</loglevel_type></event></events></pid></pids></domain></domains></output></command>
</COMMAND_OUTPUT>
<COMMAND_INPUT>
+lttng --mi xml list -l
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command><name>list</name><output><domains><domain><type>LOG4J</type><buffer_type>PER_PID</buffer_type><pids><pid><id>18332</id><name>java</name><events><event><name>Test</name><type>TRACEPOINT</type><enabled>true</enabled><filter>false</filter><loglevel>UNKNOWN</loglevel><loglevel_type>ALL</loglevel_type><exclusion>false</exclusion></event></events></pid></pids></domain></domains></output></command>
+</COMMAND_OUTPUT>
+<COMMAND_INPUT>
lttng --mi xml list
</COMMAND_INPUT>
<COMMAND_RESULT>
</output>
</command>
</COMMAND_OUTPUT>
+<COMMAND_INPUT>
+lttng --mi xml list -l
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command>
+ <name>list</name>
+ <output>
+ <domains>
+ <domain>
+ <type>LOG4J</type>
+ <buffer_type>PER_PID</buffer_type>
+ <pids>
+ <pid>
+ <id>18332</id>
+ <name>java</name>
+ <events>
+ <event>
+ <name>Test</name>
+ <type>TRACEPOINT</type>
+ <enabled>true</enabled>
+ <filter>false</filter>
+ <loglevel>UNKNOWN</loglevel>
+ <loglevel_type>ALL</loglevel_type>
+ <exclusion>false</exclusion>
+ </event>
+ </events>
+ </pid>
+ </pids>
+ </domain>
+ </domains>
+ </output>
+</command>
+</COMMAND_OUTPUT>
</SCENARIO>
####################################################################
</output>
</command>
</COMMAND_OUTPUT>
+<COMMAND_INPUT>
+lttng --mi xml list -l
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command xmlns="http://lttng.org/xml/ns/lttng-mi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://lttng.org/xml/ns/lttng-mi http://lttng.org/xml/schemas/lttng-mi/3/lttng-mi-3.0.xsd" schemaVersion="3.0">
+ <name>list</name>
+ <output>
+ <domains>
+ <domain>
+ <type>LOG4J</type>
+ <buffer_type>PER_PID</buffer_type>
+ <pids>
+ <pid>
+ <id>5600</id>
+ <name>java</name>
+ <events>
+ <event>
+ <name>Test</name>
+ <type>TRACEPOINT</type>
+ <enabled>true</enabled>
+ <loglevel>UNKNOWN</loglevel>
+ <loglevel_type>ALL</loglevel_type>
+ <exclusions />
+ </event>
+ </events>
+ </pid>
+ </pids>
+ </domain>
+ </domains>
+ </output>
+</command>
+</COMMAND_OUTPUT>
</SCENARIO>
####################################################################
</output>
</command>
</COMMAND_OUTPUT>
+<COMMAND_INPUT>
+lttng --mi xml list -l
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command xmlns="http://lttng.org/xml/ns/lttng-mi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://lttng.org/xml/ns/lttng-mi http://lttng.org/xml/schemas/lttng-mi/3/lttng-mi-3.0.xsd" schemaVersion="3.0">
+ <name>list</name>
+ <output>
+ <domains>
+ <domain>
+ <type>LOG4J</type>
+ <buffer_type>PER_PID</buffer_type>
+ <pids>
+ <pid>
+ <id>5600</id>
+ <name>java</name>
+ <events>
+ <event>
+ <name>Test</name>
+ <type>TRACEPOINT</type>
+ <enabled>true</enabled>
+ <loglevel>UNKNOWN</loglevel>
+ <loglevel_type>ALL</loglevel_type>
+ <exclusions />
+ </event>
+ </events>
+ </pid>
+ </pids>
+ </domain>
+ </domains>
+ </output>
+</command>
+</COMMAND_OUTPUT>
</SCENARIO>
####################################################################
</output>
</command>
</COMMAND_OUTPUT>
+<COMMAND_INPUT>
+lttng --mi xml list -l
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command xmlns="http://lttng.org/xml/ns/lttng-mi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://lttng.org/xml/ns/lttng-mi http://lttng.org/xml/schemas/lttng-mi/3/lttng-mi-3.0.xsd" schemaVersion="3.0">
+ <name>list</name>
+ <output>
+ <domains>
+ <domain>
+ <type>LOG4J</type>
+ <buffer_type>PER_PID</buffer_type>
+ <pids>
+ <pid>
+ <id>5600</id>
+ <name>java</name>
+ <events>
+ <event>
+ <name>Test</name>
+ <type>TRACEPOINT</type>
+ <enabled>true</enabled>
+ <loglevel>UNKNOWN</loglevel>
+ <loglevel_type>ALL</loglevel_type>
+ <exclusions />
+ </event>
+ </events>
+ </pid>
+ </pids>
+ </domain>
+ </domains>
+ </output>
+</command>
+</COMMAND_OUTPUT>
</SCENARIO>
####################################################################
# Scenario: Test "lttng create <session>
</output>
</command>
</COMMAND_OUTPUT>
+<COMMAND_INPUT>
+lttng --mi xml list -l
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command>
+ <name>list</name>
+ <output>
+ <domains>
+ <domain>
+ <type>LOG4J</type>
+ <buffer_type>PER_PID</buffer_type>
+ <pids>
+ <pid>
+ <id>18332</id>
+ <name>java</name>
+ <events>
+ <event>
+ <name>Test</name>
+ <type>TRACEPOINT</type>
+ <enabled>true</enabled>
+ <filter>false</filter>
+ <loglevel>UNKNOWN</loglevel>
+ <loglevel_type>ALL</loglevel_type>
+ <exclusion>false</exclusion>
+ </event>
+ </events>
+ </pid>
+ </pids>
+ </domain>
+ </domains>
+ </output>
+</command>
+</COMMAND_OUTPUT>
</SCENARIO>
####################################################################
</output>
</command>
</COMMAND_OUTPUT>
+<COMMAND_INPUT>
+lttng --mi xml list -l
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command>
+ <name>list</name>
+ <output>
+ <domains>
+ <domain>
+ <type>LOG4J</type>
+ <buffer_type>PER_PID</buffer_type>
+ <pids>
+ <pid>
+ <id>18332</id>
+ <name>java</name>
+ <events>
+ <event>
+ <name>Test</name>
+ <type>TRACEPOINT</type>
+ <enabled>true</enabled>
+ <filter>false</filter>
+ <loglevel>UNKNOWN</loglevel>
+ <loglevel_type>ALL</loglevel_type>
+ <exclusion>false</exclusion>
+ </event>
+ </events>
+ </pid>
+ </pids>
+ </domain>
+ </domains>
+ </output>
+</command>
+</COMMAND_OUTPUT>
</SCENARIO>
####################################################################
</output>
</command>
</COMMAND_OUTPUT>
+<COMMAND_INPUT>
+lttng --mi xml list -l
+</COMMAND_INPUT>
+<COMMAND_RESULT>
+0
+</COMMAND_RESULT>
+<COMMAND_OUTPUT>
+<?xml version="1.0" encoding="UTF-8"?>
+<command>
+ <name>list</name>
+ <output>
+ <domains>
+ <domain>
+ <type>LOG4J</type>
+ <buffer_type>PER_PID</buffer_type>
+ <pids>
+ <pid>
+ <id>18332</id>
+ <name>java</name>
+ <events>
+ <event>
+ <name>Test</name>
+ <type>TRACEPOINT</type>
+ <enabled>true</enabled>
+ <filter>false</filter>
+ <loglevel>UNKNOWN</loglevel>
+ <loglevel_type>ALL</loglevel_type>
+ <exclusion>false</exclusion>
+ </event>
+ </events>
+ </pid>
+ </pids>
+ </domain>
+ </domains>
+ </output>
+</command>
+</COMMAND_OUTPUT>
</SCENARIO>
####################################################################
# Scenario: Test "lttng create <session>
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;
-import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.ITraceLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.LogLevelType;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType;
import org.eclipse.tracecompass.internal.lttng2.control.ui.Activator;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.messages.Messages;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TraceDomainComponent;
/**
* The composite with widgets for collecting information about JUL events.
*/
- private EnableJulEventsComposite fJulComposite;
+ private EnableLoggersComposite fJulComposite;
+ /**
+ * The composite with widgets for collecting information about LOG4J events.
+ */
+ private EnableLoggersComposite fLog4jComposite;
/**
* Radio button for selecting kernel domain.
*/
* Radio button for selecting JUL domain.
*/
private Button fJulButton;
+ /**
+ * Radio button for selecting LOG4J domain.
+ */
+ private Button fLog4jButton;
/**
* The referenced trace provider group containing the kernel provider and UST
* provider component which contains a list of available tracepoints.
case UST:
return fUstComposite.isAllTracePoints();
case LOG4J:
+ return fLog4jComposite.isAllTracePoints();
case PYTHON:
case UNKNOWN:
default:
public boolean isTracepoints() {
switch (fDomain) {
case JUL:
+ case LOG4J:
+ case PYTHON:
// Loggers are always TRACEPOINT
return true;
case KERNEL:
return fKernelComposite.isTracepoints();
case UST:
return fUstComposite.isTracepoints();
- case LOG4J:
- case PYTHON:
case UNKNOWN:
default:
return false;
case JUL:
return fJulComposite.isAllTracePoints();
case LOG4J:
+ return fLog4jComposite.isAllTracePoints();
case PYTHON:
case UNKNOWN:
default:
case UST:
return fUstComposite.getEventNames();
case LOG4J:
+ return fLog4jComposite.getEventNames();
case PYTHON:
case UNKNOWN:
default:
case UST:
return fUstComposite.isLogLevel();
case LOG4J:
+ return fLog4jComposite.isLogLevel();
case PYTHON:
case UNKNOWN:
default:
case UST:
return fUstComposite.getLogLevelType();
case LOG4J:
+ return fLog4jComposite.getLogLevelType();
case PYTHON:
case UNKNOWN:
default:
case UST:
return fUstComposite.getLogLevel();
case LOG4J:
+ return fLog4jComposite.getLogLevel();
case PYTHON:
case UNKNOWN:
default:
// ------------------------------------------------------------------------
Group domainGroup = new Group(fDialogComposite, SWT.SHADOW_NONE);
domainGroup.setText(Messages.TraceControl_DomainDisplayName);
- layout = new GridLayout(3, true);
+ layout = new GridLayout(4, true);
domainGroup.setLayout(layout);
fKernelButton = new Button(domainGroup, SWT.RADIO);
fUstButton.setText(Messages.TraceControl_UstDisplayName);
fJulButton = new Button(domainGroup, SWT.RADIO);
fJulButton.setText(Messages.TraceControl_JULDomainDisplayName);
+ fLog4jButton = new Button(domainGroup, SWT.RADIO);
+ fLog4jButton.setText(Messages.TraceControl_LOG4JDomainDisplayName);
switch (fDomain) {
case KERNEL:
fJulButton.setSelection(true);
break;
case LOG4J:
+ fLog4jButton.setSelection(true);
+ break;
case PYTHON:
case UNKNOWN:
default:
fKernelButton.setEnabled(false);
fUstButton.setEnabled(false);
fJulButton.setEnabled(false);
+ fLog4jButton.setEnabled(false);
} else if ((fProviderGroup != null) && (!fProviderGroup.hasKernelProvider())) {
fKernelButton.setEnabled(false);
fUstButton.setEnabled(true);
fJulButton.setEnabled(true);
+ fLog4jButton.setEnabled(true);
}
// layout widgets
fUstComposite = null;
fKernelComposite = null;
fJulComposite = null;
+ fLog4jComposite = null;
switch (fDomain) {
case KERNEL:
createJulComposite();
break;
case LOG4J:
+ createLog4jComposite();
+ break;
case PYTHON:
case UNKNOWN:
default:
}
});
+ fLog4jButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (fLog4jButton.getSelection()) {
+ disposeAllComposite();
+ createLog4jComposite();
+ fDialogComposite.layout();
+ }
+ }
+ });
getShell().setMinimumSize(new Point(550, 850));
fDomain = TraceDomainType.UST;
} else if (fJulButton.getSelection()) {
fDomain = TraceDomainType.JUL;
+ } else if (fLog4jButton.getSelection()) {
+ fDomain= TraceDomainType.LOG4J;
}
// Validate kernel composite in case of kernel domain
return;
}
+ // Validate LOG4J composite in case of JUL domain
+ if (fLog4jComposite != null && !fLog4jComposite.isValid()) {
+ return;
+ }
+
// validation successful -> call super.okPressed()
super.okPressed();
}
disposeKernelComposite();
disposeUstComposite();
disposeJulComposite();
+ disposeLog4jComposite();
}
/**
}
}
-
/**
* Creates the JUL composite (if not existing)
*/
private void createJulComposite() {
if (fJulComposite == null) {
- fJulComposite = new EnableJulEventsComposite(fDialogComposite, SWT.NONE, fProviderGroup);
+ fJulComposite = new EnableLoggersComposite(fDialogComposite, SWT.NONE, fProviderGroup, TraceDomainType.JUL);
GridLayout layout = new GridLayout(1, true);
fJulComposite.setLayout(layout);
fJulComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
}
}
+ /**
+ * Creates the LOG4J composite (if not existing)
+ */
+ private void createLog4jComposite() {
+ if (fLog4jComposite == null) {
+ fLog4jComposite = new EnableLoggersComposite(fDialogComposite, SWT.NONE, fProviderGroup, TraceDomainType.LOG4J);
+ GridLayout layout = new GridLayout(1, true);
+ fLog4jComposite.setLayout(layout);
+ fLog4jComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ fLog4jComposite.createContent();
+ }
+ }
+
+ /**
+ * Disposes the LOG4J composite (if existing)
+ */
+ private void disposeLog4jComposite() {
+ if (fLog4jComposite != null) {
+ fLog4jComposite.dispose();
+ fLog4jComposite = null;
+ }
+ }
}
--- /dev/null
+/**********************************************************************
+ * Copyright (c) 2016 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:
+ * Bruno Roy - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.tracecompass.internal.lttng2.control.ui.views.dialogs;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTreeViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.ITraceLogLevel;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.LogLevelType;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceJulLogLevel;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLog4jLogLevel;
+import org.eclipse.tracecompass.internal.lttng2.control.ui.views.messages.Messages;
+import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.ITraceControlComponent;
+import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.BaseLoggerComponent;
+import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TargetNodeComponent;
+import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TraceControlContentProvider;
+import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TraceControlLabelProvider;
+import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TraceProviderGroup;
+import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.UstProviderComponent;
+import org.eclipse.ui.dialogs.FilteredTree;
+import org.eclipse.ui.dialogs.PatternFilter;
+
+/**
+ * A composite for collecting information about loggers to be enabled.
+ *
+ * @author Bruno Roy
+ */
+public class EnableLoggersComposite extends Composite implements IBaseEnableUstEvents {
+
+ // ------------------------------------------------------------------------
+ // Constants
+ // ------------------------------------------------------------------------
+
+ private enum GroupEnum { LOGGERS }
+
+ // ------------------------------------------------------------------------
+ // Attributes
+ // ------------------------------------------------------------------------
+
+ /**
+ * The referenced trace provider group containing the loggers providers
+ * component which contains a list of available tracepoints.
+ */
+ private final TraceProviderGroup fProviderGroup;
+ /**
+ * A button to enable/disable the loggers group
+ */
+ private Button fLoggersActivateButton;
+ /**
+ * A tree viewer for displaying and selection of available loggers.
+ */
+ private CheckboxTreeViewer fLoggersViewer;
+ /**
+ * The flag indicating that loggers are selected.
+ */
+ private boolean fIsLoggers;
+ /**
+ * The list of loggers to be enabled.
+ */
+ private List<String> fLoggers;
+ /**
+ * A button to enable/disable the log level group
+ */
+ private Button fLogLevelActivateButton;
+ /**
+ * A Combo box for selecting the log level.
+ */
+ private CCombo fLogLevelCombo;
+ /**
+ * A button for selecting the log level (range 0 to level).
+ */
+ private Button fLogLevelButton;
+ /**
+ * A button for selecting the specified log level only.
+ */
+ private Button fLogLevelOnlyButton;
+ /**
+ * The flag indicating that all log level are selected.
+ */
+ private boolean fIsLogLevel;
+ /**
+ * The flag indicating that all loggers (across providers) are selected.
+ */
+ private boolean fIsAllLoggers;
+ /**
+ * The type of the log level (loglevel or loglevel-only)
+ */
+ private LogLevelType fLogLevelType;
+ /**
+ * The selected log level.
+ */
+ private ITraceLogLevel fLogLevel;
+ /**
+ * The domain of the loggers.
+ */
+ private final TraceDomainType fDomain;
+
+ // ------------------------------------------------------------------------
+ // Constructors
+ // ------------------------------------------------------------------------
+ /**
+ * Constructor
+ *
+ * @param parent
+ * a parent composite
+ * @param style
+ * a composite style
+ * @param providerGroup
+ * the trace provider group
+ * @param domain
+ * the domain of the loggers
+ */
+ public EnableLoggersComposite(Composite parent, int style, TraceProviderGroup providerGroup, TraceDomainType domain) {
+ super(parent, style);
+ fProviderGroup = providerGroup;
+ fDomain = domain;
+ }
+
+ // ------------------------------------------------------------------------
+ // Accessors
+ // ------------------------------------------------------------------------
+
+ @Override
+ public ITraceLogLevel getLogLevel() {
+ return fLogLevel;
+ }
+
+ @Override
+ public LogLevelType getLogLevelType() {
+ return fLogLevelType;
+ }
+
+ @Override
+ public boolean isAllTracePoints() {
+ return fIsAllLoggers;
+ }
+
+ @Override
+ public List<String> getEventNames() {
+ return new ArrayList<>(fLoggers);
+ }
+
+ @Override
+ public boolean isLogLevel() {
+ return fIsLogLevel;
+ }
+
+ // ------------------------------------------------------------------------
+ // Operations
+ // ------------------------------------------------------------------------
+
+ /**
+ * Create the contents of this event composite
+ */
+ public void createContent() {
+
+ // Logger group
+ createLoggersGroup();
+
+ // Log Level Group
+ createLogLevelGroup();
+
+ // Set default enablements
+ setEnablements(GroupEnum.LOGGERS);
+ }
+
+ /**
+ * Validates the loggers composite input data.
+ *
+ * @return true if configured data is valid and can be retrieved.
+ */
+ public boolean isValid() {
+
+ fIsLoggers = fLoggersActivateButton.getSelection();
+ fIsLogLevel = fLogLevelActivateButton.getSelection();
+
+ // Initialize loggers fields
+ fLoggers = new ArrayList<>();
+ if (fIsLoggers) {
+ Set<String> set = new HashSet<>();
+ Object[] checkedElements = fLoggersViewer.getCheckedElements();
+ int totalNbEvents = 0;
+ for (int i = 0; i < checkedElements.length; i++) {
+ ITraceControlComponent component = (ITraceControlComponent) checkedElements[i];
+ if (component instanceof BaseLoggerComponent) {
+ totalNbEvents++;
+ if (!set.contains(component.getName())) {
+ set.add(component.getName());
+ fLoggers.add(component.getName());
+ }
+ }
+
+ }
+
+ // verify if all events are selected
+ int nbLoggers = 0;
+ List<ITraceControlComponent> comps = fProviderGroup.getChildren(UstProviderComponent.class);
+ for (ITraceControlComponent comp : comps) {
+ // We want the children of each UST provider
+ ITraceControlComponent[] events = comp.getChildren();
+ for (ITraceControlComponent event : events) {
+ if (event instanceof BaseLoggerComponent && fDomain.equals(((BaseLoggerComponent)event).getDomain())) {
+ nbLoggers++;
+ }
+ }
+
+ }
+ fIsAllLoggers = nbLoggers == totalNbEvents;
+ }
+
+ // initialize log level event name string
+ fLogLevelType = LogLevelType.LOGLEVEL_NONE;
+ if (fIsLogLevel) {
+ if (fLogLevelButton.getSelection()) {
+ fLogLevelType = LogLevelType.LOGLEVEL;
+ } else if (fLogLevelOnlyButton.getSelection()) {
+ fLogLevelType = LogLevelType.LOGLEVEL_ONLY;
+ }
+
+ ITraceLogLevel[] levels = getLogLevelNames();
+ int id = fLogLevelCombo.getSelectionIndex();
+
+ if (id < 0) {
+ MessageDialog.openError(getShell(),
+ Messages.TraceControl_EnableLoggersDialogTitle,
+ Messages.TraceControl_InvalidLogLevel);
+
+ return false;
+ }
+
+ if (fLoggers.isEmpty()) {
+ MessageDialog.openError(getShell(),
+ Messages.TraceControl_EnableLoggersDialogTitle,
+ Messages.TraceControl_InvalidLogger);
+
+ return false;
+ }
+ if (levels != null) {
+ fLogLevel = levels[id];
+ }
+ }
+
+ // validation successful -> call super.okPressed()
+ return true;
+ }
+
+ // ------------------------------------------------------------------------
+ // Helper methods
+ // ------------------------------------------------------------------------
+
+ private ITraceLogLevel[] getLogLevelNames() {
+ switch (fDomain) {
+ case JUL:
+ return TraceJulLogLevel.values();
+ case LOG4J:
+ return TraceLog4jLogLevel.values();
+ //$CASES-OMITTED$
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * Creates loggers group.
+ */
+ private void createLoggersGroup() {
+ // Create the loggers group
+ Group loggersMainGroup = new Group(this, SWT.SHADOW_NONE);
+ loggersMainGroup.setText(Messages.TraceControl_EnableEventsLoggerGroupName);
+ GridLayout layout = new GridLayout(2, false);
+ loggersMainGroup.setLayout(layout);
+ GridData data = new GridData(GridData.FILL_BOTH);
+ loggersMainGroup.setLayoutData(data);
+
+ // Create the Select button
+ Composite buttonComposite = new Composite(loggersMainGroup, SWT.NONE);
+ layout = new GridLayout(1, true);
+ buttonComposite.setLayout(layout);
+ data = new GridData(SWT.BEGINNING, SWT.CENTER, false, true);
+ buttonComposite.setLayoutData(data);
+
+ fLoggersActivateButton = new Button(buttonComposite, SWT.RADIO);
+ fLoggersActivateButton.setText(Messages.TraceControl_EnableGroupSelectionName);
+ data = new GridData(GridData.FILL_HORIZONTAL);
+ fLoggersActivateButton.setLayoutData(data);
+ fLoggersActivateButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ setEnablements(GroupEnum.LOGGERS);
+ }
+ });
+
+ // Create the group for the tree
+ Group loggersGroup = new Group(loggersMainGroup, SWT.SHADOW_NONE);
+ layout = new GridLayout(1, true);
+ loggersGroup.setLayout(layout);
+ data = new GridData(GridData.FILL_BOTH);
+ loggersGroup.setLayoutData(data);
+ new FilteredTree(loggersGroup, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER, new PatternFilter(), true) {
+ @Override
+ protected TreeViewer doCreateTreeViewer(Composite aparent, int style) {
+ fLoggersViewer = new CheckboxTreeViewer(aparent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+ fLoggersViewer.getTree().setToolTipText(Messages.TraceControl_EnableEventsLoggerTreeTooltip);
+ fLoggersViewer.setContentProvider(new LoggersContentProvider());
+
+ fLoggersViewer.setLabelProvider(new LoggersLabelProvider());
+ fLoggersViewer.addCheckStateListener(new LoggersCheckStateListener());
+
+ fLoggersViewer.setInput(fProviderGroup.getParent());
+ fLoggersViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+ return fLoggersViewer;
+ }
+ };
+ }
+
+ /**
+ * Creates log level group.
+ */
+ private void createLogLevelGroup() {
+ Group logLevelMainGroup = new Group(this, SWT.SHADOW_NONE);
+ logLevelMainGroup.setText(Messages.TraceControl_EnableEventsLogLevelGroupName);
+ GridLayout layout = new GridLayout(2, false);
+ logLevelMainGroup.setLayout(layout);
+ GridData data = new GridData(GridData.FILL_HORIZONTAL);
+ logLevelMainGroup.setLayoutData(data);
+
+ Composite buttonComposite = new Composite(logLevelMainGroup, SWT.NONE);
+ layout = new GridLayout(1, false);
+ buttonComposite.setLayout(layout);
+ data = new GridData(SWT.BEGINNING, SWT.CENTER, false, true);
+ buttonComposite.setLayoutData(data);
+
+ fLogLevelActivateButton = new Button(buttonComposite, SWT.CHECK);
+ fLogLevelActivateButton.setText(Messages.TraceControl_EnableGroupSelectionName);
+ fLogLevelActivateButton.setSelection(false);
+ data = new GridData(GridData.FILL_HORIZONTAL);
+ fLogLevelActivateButton.setLayoutData(data);
+ fLogLevelActivateButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ fLogLevelCombo.setEnabled(fLogLevelActivateButton.getSelection());
+ fLogLevelButton.setEnabled(fLogLevelActivateButton.getSelection());
+ fLogLevelOnlyButton.setEnabled(fLogLevelActivateButton.getSelection());
+ }
+ });
+
+ Group logLevelGroup = new Group(logLevelMainGroup, SWT.SHADOW_NONE);
+ layout = new GridLayout(2, true);
+ logLevelGroup.setLayout(layout);
+ logLevelGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ fLogLevelButton = new Button(logLevelGroup, SWT.RADIO);
+ fLogLevelButton.setText(Messages.TraceControl_EnableEventsLogLevelTypeName);
+ fLogLevelButton.setToolTipText(Messages.TraceControl_EnableEventsLogLevelTypeTooltip);
+ data = new GridData(GridData.FILL_BOTH);
+ fLogLevelButton.setLayoutData(data);
+ fLogLevelButton.setSelection(true);
+
+ fLogLevelOnlyButton = new Button(logLevelGroup, SWT.RADIO);
+ fLogLevelOnlyButton.setText(Messages.TraceControl_EnableEventsLogLevelOnlyTypeName);
+ fLogLevelOnlyButton.setToolTipText(Messages.TraceControl_EnableEventsLogLevelOnlyTypeTooltip);
+ data = new GridData(GridData.FILL_BOTH);
+ fLogLevelButton.setLayoutData(data);
+
+ fLogLevelCombo = new CCombo(logLevelGroup, SWT.READ_ONLY);
+ ITraceLogLevel[] levels = getLogLevelNames();
+ if (levels != null) {
+ String[] levelNames = new String[levels.length - 1];
+ int k = 0;
+ for (int i = 0; i < levels.length; i++) {
+ if (levels[i] != TraceJulLogLevel.LEVEL_UNKNOWN &&
+ levels[i] != TraceLog4jLogLevel.LEVEL_UNKNOWN) {
+ levelNames[k++] = levels[i].getInName();
+ }
+ }
+ fLogLevelCombo.setItems(levelNames);
+ }
+
+ fLogLevelCombo.setToolTipText(Messages.TraceControl_EnableEventsLogLevelTooltip);
+ data = new GridData(GridData.FILL_HORIZONTAL);
+ data.horizontalSpan = 4;
+ fLogLevelCombo.setLayoutData(data);
+
+ // By default the combo box and the buttons are not enabled
+ fLogLevelCombo.setEnabled(false);
+ fLogLevelButton.setEnabled(false);
+ fLogLevelOnlyButton.setEnabled(false);
+
+ }
+
+ /**
+ * Enable/selects widgets depending on the group specified.
+ *
+ * @param group
+ * group to enable.
+ */
+ private void setEnablements(GroupEnum group) {
+
+ // Enable/disable trace point items
+ fLoggersActivateButton.setSelection(group == GroupEnum.LOGGERS);
+ fLoggersViewer.getTree().setEnabled(group == GroupEnum.LOGGERS);
+ }
+
+ /**
+ * Content provider for the loggers tree.
+ */
+ public final class LoggersContentProvider extends TraceControlContentProvider {
+ @Override
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof TargetNodeComponent) {
+ List<ITraceControlComponent> children = ((ITraceControlComponent) parentElement).getChildren(TraceProviderGroup.class);
+ return children.toArray(new ITraceControlComponent[children.size()]);
+ }
+ if (parentElement instanceof TraceProviderGroup) {
+ List<ITraceControlComponent> ustProviderChildren = ((ITraceControlComponent) parentElement).getChildren(UstProviderComponent.class)
+ .stream().filter(comp -> ((UstProviderComponent) comp).getLoggerComponents(fDomain).size() > 0)
+ .collect(Collectors.toList());
+ return ustProviderChildren.toArray(new ITraceControlComponent[ustProviderChildren.size()]);
+ }
+ if (parentElement instanceof UstProviderComponent) {
+ List<ITraceControlComponent> loggers = ((UstProviderComponent) parentElement).getLoggerComponents(fDomain);
+ return loggers.toArray(new ITraceControlComponent[loggers.size()]);
+ }
+ return new Object[0];
+ }
+ }
+
+ /**
+ * Content label for the loggers tree.
+ */
+ public static final class LoggersLabelProvider extends TraceControlLabelProvider {
+ @Override
+ public Image getImage(Object element) {
+ return null;
+ }
+
+ @Override
+ public String getText(Object element) {
+ if ((element != null) && (element instanceof TraceProviderGroup)) {
+ return Messages.TraceControl_EnableEventsTreeAllLabel;
+ }
+
+ if ((element != null) && (element instanceof UstProviderComponent)) {
+ return Messages.TraceControl_EnableEventsTreeAllLabel + " - " + ((UstProviderComponent)element).getName(); //$NON-NLS-1$
+ }
+ return super.getText(element);
+ }
+ }
+
+ /**
+ * Check state listener for the loggers tree.
+ */
+ public final class LoggersCheckStateListener implements ICheckStateListener {
+ @Override
+ public void checkStateChanged(CheckStateChangedEvent event) {
+ if (event.getChecked()) {
+ if (event.getElement() instanceof TraceProviderGroup) {
+ fLoggersViewer.setSubtreeChecked(event.getElement(), true);
+ }
+ if (event.getElement() instanceof UstProviderComponent) {
+ fLoggersViewer.setSubtreeChecked(event.getElement(), true);
+ }
+ } else {
+ if (event.getElement() instanceof TraceProviderGroup) {
+ fLoggersViewer.setSubtreeChecked(event.getElement(), true);
+ }
+ if (event.getElement() instanceof UstProviderComponent) {
+ ITraceControlComponent component = (ITraceControlComponent) event.getElement();
+ fLoggersViewer.setSubtreeChecked(event.getElement(), false);
+ fLoggersViewer.setChecked(component.getParent(), false);
+ } else {
+ ITraceControlComponent component = (ITraceControlComponent) event.getElement();
+ fLoggersViewer.setChecked(component.getParent(), false);
+ fLoggersViewer.setChecked(component.getParent().getParent(), false);
+ }
+ }
+ }
+ }
+}
List<ITraceControlComponent> comps = fProviderGroup.getChildren(UstProviderComponent.class);
for (ITraceControlComponent comp : comps) {
List<ITraceControlComponent> children = comp.getChildren(BaseEventComponent.class);
- nbUstEvents = children.size();
+ nbUstEvents += children.size();
}
fIsAllTracepoints = (nbUstEvents == totalNbEvents);
}
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.LogLevelType;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceJulLogLevel;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLog4jLogLevel;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLogLevel;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.ITraceLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.ui.Activator;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.messages.Messages;
/**
* The selected log level.
*/
- private TraceJulLogLevel fLogLevel;
+ private ITraceLogLevel fLogLevel;
/**
* The type of the log level (loglevel or loglevel-only)
*/
private LogLevelType fLogLevelType;
+ /**
+ * The logger domain type ({@link TraceDomainType})
+ */
+ private TraceDomainType fLoggerDomain = TraceDomainType.UNKNOWN;
// ------------------------------------------------------------------------
// Constructors
// Accessors
// ------------------------------------------------------------------------
@Override
- public TraceJulLogLevel getLogLevel() {
+ public ITraceLogLevel getLogLevel() {
return fLogLevel;
}
@Override
return fLogLevelType;
}
+ @Override
+ public void setLoggerDomain(TraceDomainType domain) {
+ fLoggerDomain = domain;
+
+ }
+
// ------------------------------------------------------------------------
// Operations
// ------------------------------------------------------------------------
data = new GridData(GridData.FILL_BOTH);
fLogLevelButton.setLayoutData(data);
- TraceJulLogLevel[] levels = TraceJulLogLevel.values();
-
- String[] levelNames = new String[levels.length - 1];
- int k = 0;
- for (int i = 0; i < levels.length; i++) {
- if (levels[i] != TraceJulLogLevel.LEVEL_UNKNOWN) {
- levelNames[k++] = levels[i].getInName();
+ ITraceLogLevel[] levels = null;
+ String[] levelNames = null;
+ switch (fLoggerDomain) {
+ case JUL:
+ levels = TraceJulLogLevel.values();
+
+ levelNames = new String[levels.length - 1];
+ int k = 0;
+ for (int i = 0; i < levels.length; i++) {
+ if (levels[i] != TraceJulLogLevel.LEVEL_UNKNOWN) {
+ levelNames[k++] = levels[i].getInName();
+ }
}
+ break;
+ case LOG4J:
+ levels = TraceLog4jLogLevel.values();
+
+ levelNames = new String[levels.length - 1];
+ int l = 0;
+ for (int i = 0; i < levels.length; i++) {
+ if (levels[i] != TraceLog4jLogLevel.LEVEL_UNKNOWN) {
+ levelNames[l++] = levels[i].getInName();
+ }
+ }
+ break;
+ //$CASES-OMITTED$
+ default:
+ break;
}
fLogLevelCombo = new CCombo(logLevelGroup, SWT.READ_ONLY);
fLogLevelButton.setEnabled(false);
fLogLevelOnlyButton.setEnabled(false);
-
getShell().setMinimumSize(new Point(300, 200));
return dialogComposite;
fSessionIndex = fSessionsCombo.getSelectionIndex();
fLogLevel = null;
- // If nothing is selected in the combo box that means that all the
- // loglevels should be enabled.
+ // If nothing is selected in the combo box that means that all the loglevels should be enabled.
if (!fLogLevelCombo.getText().isEmpty()) {
- TraceJulLogLevel[] levels = TraceJulLogLevel.values();
+ ITraceLogLevel[] levels;
int id = fLogLevelCombo.getSelectionIndex();
+ switch (fLoggerDomain) {
+ case JUL:
+ levels = TraceJulLogLevel.values();
+ break;
+ case LOG4J:
+ levels = TraceLog4jLogLevel.values();
+ break;
+ //$CASES-OMITTED$
+ default:
+ levels = TraceLogLevel.values();
+ break;
+ }
+ fLogLevel = levels[id];
if (id < 0) {
MessageDialog.openError(getShell(),
} else if (fLogLevelOnlyButton.getSelection()) {
fLogLevelType = LogLevelType.LOGLEVEL_ONLY;
}
-
- fLogLevel = levels[id];
}
super.okPressed();
}
import org.eclipse.tracecompass.internal.lttng2.control.core.model.ITraceLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.LogLevelType;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType;
/**
* Interface for a dialog box for collecting information about the loggers to enable.
* @return a log level
*/
ITraceLogLevel getLogLevel();
+
+ /**
+ * Sets the logger domain type
+ * @param domain - the domain type ({@link TraceDomainType})
+ */
+ void setLoggerDomain(TraceDomainType domain);
}
}
final Parameter param = tmpParam;
- // Open dialog box to retrieve the session and channel where the events
- // should be enabled in.
+ // Open dialog box to retrieve the session and channel where the events should be enabled in.
final GetLoggerInfoDialog dialog = TraceControlDialogFactory.getInstance().getGetLoggerInfoDialog();
dialog.setSessions(param.getSessions());
+ dialog.setLoggerDomain(param.getLoggerDomain());
if (dialog.open() != Window.OK) {
return null;
// enable events on default channel
if (dialog.getLogLevel() != null) {
- session.enableLogLevel(loggerNames, dialog.getLogLevelType(), dialog.getLogLevel(), null, TraceDomainType.JUL, monitor);
+ session.enableLogLevel(loggerNames, dialog.getLogLevelType(), dialog.getLogLevel(), null, param.getLoggerDomain(), monitor);
} else {
- session.enableEvents(loggerNames, TraceDomainType.JUL, null, null, monitor);
+ session.enableEvents(loggerNames, param.getLoggerDomain(), null, null, monitor);
}
} catch (ExecutionException e) {
if (element instanceof BaseLoggerComponent) {
BaseLoggerComponent logger = (BaseLoggerComponent) element;
- // The domain is always going to be UST for loggers
- domain = TraceDomainType.UST;
-
- // TODO: Add some logic when more loggers are added to
- // determine if the multiple selection is OK, only loggers
- // from the same type should be able to be enabled at the
- // same time
- // check AssignEventHandler for reference
+ // The loggers have to be the same domain (multiple selection)
+ if (domain == null) {
+ domain = logger.getDomain();
+ } else if (!domain.equals(logger.getDomain())){
+ loggers.clear();
+ break;
+ }
// Add BaseLoggerComponents
loggers.add(logger);
public List<BaseLoggerComponent> getLoggers() {
return fLoggers;
}
+
+ /**
+ * Return the logger domain ({@link TraceDomainType})
+ *
+ * @return - the logger domain ({@link TraceDomainType})
+ */
+ public TraceDomainType getLoggerDomain() {
+ return fDomain;
+ }
}
}
Exception error = null;
try {
String filter = dialog.getFilterExpression();
+ List<String> eventNames = null;
switch (dialog.getDomain()) {
case KERNEL:
case UST:
if (dialog.isAllTracePoints()) {
enableEvents(param, null, dialog.getDomain(), filter, dialog.getExcludedEvents(), monitor);
} else {
- List<String> eventNames = dialog.getEventNames();
+ eventNames = dialog.getEventNames();
if (!eventNames.isEmpty()) {
enableEvents(param, eventNames, dialog.getDomain(), filter, dialog.getExcludedEvents(), monitor);
}
// Enable event using a wildcard
if (dialog.isWildcard()) {
- List<String> eventNames = dialog.getEventNames();
+ eventNames = dialog.getEventNames();
eventNames.add(dialog.getWildcard());
if (!eventNames.isEmpty()) {
}
break;
case JUL:
- List<String> eventNames = dialog.getEventNames();
- if (dialog.isAllTracePoints()) {
+ case LOG4J:
+ eventNames = dialog.getEventNames();
+ if (dialog.isAllEvents()) {
eventNames = null;
}
if (dialog.isLogLevel()) {
default:
break;
}
-
} catch (ExecutionException e) {
error = e;
}
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.ITraceLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.LogLevelType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceEnablement;
-import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceJulLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.ui.Activator;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.ControlView;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.messages.Messages;
* @throws ExecutionException
* If the command fails
*/
- protected abstract void changeState(TraceDomainComponent domain, List<String> loggerNames, TraceJulLogLevel logLevel, LogLevelType logLevelType, IProgressMonitor monitor) throws ExecutionException;
+ protected abstract void changeState(TraceDomainComponent domain, List<String> loggerNames, ITraceLogLevel logLevel, LogLevelType logLevelType, IProgressMonitor monitor) throws ExecutionException;
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
ISelection selection = page.getSelection(ControlView.ID);
TraceDomainComponent domain = null;
- TraceJulLogLevel logLevel = null;
+ ITraceLogLevel logLevel = null;
LogLevelType logLevelType = null;
List<TraceLoggerComponent> loggers = new ArrayList<>();
/**
* The log level.
*/
- private final TraceJulLogLevel fLogLevel;
+ private final ITraceLogLevel fLogLevel;
/**
* The log level type.
*/
* @param logLevelType
* the log level type
*/
- public Parameter(TraceDomainComponent domain, List<TraceLoggerComponent> loggers, TraceJulLogLevel logLevel, LogLevelType logLevelType) {
+ public Parameter(TraceDomainComponent domain, List<TraceLoggerComponent> loggers, ITraceLogLevel logLevel, LogLevelType logLevelType) {
fDomain = domain;
fLoggers.addAll(loggers);
fLogLevel = logLevel;
/**
* @return the log level.
*/
- public TraceJulLogLevel getLogLevel() {
+ public ITraceLogLevel getLogLevel() {
return fLogLevel;
}
}
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.ITraceLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.LogLevelType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceEnablement;
-import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceJulLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TraceDomainComponent;
/**
// ------------------------------------------------------------------------
@Override
- protected void changeState(TraceDomainComponent domain, List<String> loggerNames, TraceJulLogLevel logLevel, LogLevelType logLevelType, IProgressMonitor monitor) throws ExecutionException {
+ protected void changeState(TraceDomainComponent domain, List<String> loggerNames, ITraceLogLevel logLevel, LogLevelType logLevelType, IProgressMonitor monitor) throws ExecutionException {
domain.disableLoggers(loggerNames, monitor);
}
}
boolean isEnabled = domain != null;
- // If it's a JUL domain, the enable channel is disabled.
- if ((domain != null) && TraceDomainType.JUL.equals(domain.getDomain())) {
+ // If it's a logger domain (JUL, LOG4J, Python), the enable channel is disabled.
+ if ((domain != null) && (TraceDomainType.JUL.equals(domain.getDomain()) ||
+ TraceDomainType.LOG4J.equals(domain.getDomain()) ||
+ TraceDomainType.PYTHON.equals(domain.getDomain()))) {
isEnabled = false;
}
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.ITraceLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.LogLevelType;
-import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceEnablement;
-import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceJulLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TraceDomainComponent;
/**
// ------------------------------------------------------------------------
@Override
- protected void changeState(TraceDomainComponent domain, List<String> loggerNames, TraceJulLogLevel logLevel, LogLevelType logLevelType, IProgressMonitor monitor) throws ExecutionException {
+ protected void changeState(TraceDomainComponent domain, List<String> loggerNames, ITraceLogLevel logLevel, LogLevelType logLevelType, IProgressMonitor monitor) throws ExecutionException {
// This conditional statement makes it possible to enable the same logger multiple
// times with different log levels (with the right-click enable, directly on the logger)
if (logLevelType.equals(LogLevelType.LOGLEVEL_ALL)) {
domain.enableEvents(loggerNames, null, null, monitor);
} else {
- domain.enableLogLevel(loggerNames, logLevelType, logLevel, null, TraceDomainType.JUL, monitor);
+ domain.enableLogLevel(loggerNames, logLevelType, logLevel, null, domain.getDomain(), monitor);
}
}
}
public static String TraceControl_UstGlobalDomainDisplayName;
public static String TraceControl_UnknownDomainDisplayName;
public static String TraceControl_JULDomainDisplayName;
+ public static String TraceControl_LOG4JDomainDisplayName;
public static String TraceControl_AllSessionsDisplayName;
public static String TraceControl_SessionDisplayName;
public static String TraceControl_DomainDisplayName;
public static String TraceControl_OpenConnectionTo;
public static String TraceControl_LoggerNamePropertyName;
public static String TraceControl_LoggerTypePropertyName;
+ public static String TraceControl_LoggerDomainPropertyName;
public static String TraceControl_OverwriteModePropertyName;
public static String TraceControl_SubBufferSizePropertyName;
TraceControl_EnableEventsFunctionEventNameTooltip=The name of the event for enabling a dynamic function entry/return probe
TraceControl_EnableEventsFunctionNameLabel=Function
TraceControl_EnableEventsLoggerGroupName=Loggers
-TraceControl_EnableEventsLoggerTreeTooltip=List of available JUL loggers
+TraceControl_EnableEventsLoggerTreeTooltip=List of available loggers
TraceControl_EnableEventsWildcardGroupName=Wildcard
TraceControl_EnableEventsWildcardLabel=Wildcard
# Tree structure strings
TraceControl_KernelDomainDisplayName=Kernel
TraceControl_JULDomainDisplayName=JUL
+TraceControl_LOG4JDomainDisplayName=LOG4J
TraceControl_UstGlobalDomainDisplayName=UST global
TraceControl_UstDisplayName=UST
TraceControl_UnknownDomainDisplayName=Unknown domain
TraceControl_ConfigureMetadataChannelName=Configure metadata channel
TraceControl_LoggerNamePropertyName=Logger Name
TraceControl_LoggerTypePropertyName=Logger Type
+TraceControl_LoggerDomainPropertyName=Logger Domain
# Preferences
TraceControl_TracingGroupPreference=&Tracing Group
import org.eclipse.tracecompass.internal.lttng2.control.core.model.IBaseLoggerInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.ILoggerInfo;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.ITraceLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType;
-import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceJulLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.impl.LoggerInfo;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.ITraceControlComponent;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.property.BaseLoggerPropertySource;
/**
* @return the trace logger log level
*/
- public TraceJulLogLevel getLogLevel() {
+ public ITraceLogLevel getLogLevel() {
return fLoggerInfo.getLogLevel();
}
* @param level
* event log level to set
*/
- public void setLogLevel(TraceJulLogLevel level) {
+ public void setLogLevel(ITraceLogLevel level) {
fLoggerInfo.setLogLevel(level);
}
addChild(channel);
}
- // Since the loggers are not in a channel in the JUL domain, the loggers
- // won't be added by the previous loop.
- if (TraceDomainType.JUL.equals(domainInfo.getDomain())) {
+ // Since the loggers are not in a channel, the loggers won't be added by the previous loop
+ if (TraceDomainType.JUL.equals(domainInfo.getDomain()) || TraceDomainType.LOG4J.equals(domainInfo.getDomain())) {
List<ILoggerInfo> loggers = fDomainInfo.getLoggers();
for (ILoggerInfo loggerInfo : loggers) {
TraceLoggerComponent logger = new TraceLoggerComponent(loggerInfo.getName(), this);
import org.eclipse.swt.graphics.Image;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.ILoggerInfo;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.ITraceLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.LogLevelType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceEnablement;
-import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceJulLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.impl.LoggerInfo;
import org.eclipse.tracecompass.internal.lttng2.control.ui.Activator;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.messages.Messages;
/**
* @return the trace logger log level
*/
- public TraceJulLogLevel getLogLevel() {
+ public ITraceLogLevel getLogLevel() {
return fLoggerInfo.getLogLevel();
}
* @param level
* logger log level to set
*/
- public void setLogLevel(TraceJulLogLevel level) {
+ public void setLogLevel(ITraceLogLevel level) {
fLoggerInfo.setLogLevel(level);
}
* The base logger 'name' property ID.
*/
public static final String BASE_LOGGER_NAME_PROPERTY_ID = "base.logger.name"; //$NON-NLS-1$
+ /**
+ * The base logger 'domain' property ID.
+ */
+ public static final String BASE_LOGGER_DOMAIN_PROPERTY_ID = "base.logger.domain"; //$NON-NLS-1$
/**
* The base logger 'name' property name.
*/
public static final String BASE_LOGGER_NAME_PROPERTY_NAME = Messages.TraceControl_LoggerNamePropertyName;
+ /**
+ * The base logger 'domain' property name.
+ */
+ public static final String BASE_LOGGER_DOMAIN_PROPERTY_NAME = Messages.TraceControl_LoggerDomainPropertyName;
// ------------------------------------------------------------------------
// Attributes
public IPropertyDescriptor[] getPropertyDescriptors() {
List<IPropertyDescriptor> list = new ArrayList<> ();
list.add(new ReadOnlyTextPropertyDescriptor(BASE_LOGGER_NAME_PROPERTY_ID, BASE_LOGGER_NAME_PROPERTY_NAME));
+ list.add(new ReadOnlyTextPropertyDescriptor(BASE_LOGGER_DOMAIN_PROPERTY_ID, BASE_LOGGER_DOMAIN_PROPERTY_NAME));
return list.toArray(new IPropertyDescriptor[list.size()]);
}
public Object getPropertyValue(Object id) {
if(BASE_LOGGER_NAME_PROPERTY_ID.equals(id)) {
return fBaseLogger.getName();
+ } else if (BASE_LOGGER_DOMAIN_PROPERTY_ID.equals(id)) {
+ return fBaseLogger.getDomain().name();
}
return null;
}
import org.eclipse.tracecompass.internal.lttng2.control.core.model.LogLevelType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceJulLogLevel;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLog4jLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.messages.Messages;
import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TraceLoggerComponent;
import org.eclipse.tracecompass.tmf.ui.properties.ReadOnlyTextPropertyDescriptor;
List<IPropertyDescriptor> list = new ArrayList<>();
list.add(new ReadOnlyTextPropertyDescriptor(TRACE_LOGGER_NAME_PROPERTY_ID, TRACE_LOGGER_NAME_PROPERTY_NAME));
list.add(new ReadOnlyTextPropertyDescriptor(TRACE_LOGGER_STATE_PROPERTY_ID, TRACE_LOGGER_STATE_PROPERTY_NAME));
- if (!fLogger.getLogLevel().equals(TraceJulLogLevel.LEVEL_UNKNOWN)) {
+ if (!fLogger.getLogLevel().equals(TraceJulLogLevel.LEVEL_UNKNOWN) || !fLogger.getLogLevel().equals(TraceLog4jLogLevel.LEVEL_UNKNOWN)) {
list.add(new ReadOnlyTextPropertyDescriptor(TRACE_LOGGER_LOGLEVEL_PROPERTY_ID, TRACE_LOGGER_LOGLEVEL_PROPERTY_NAME));
}
return list.toArray(new IPropertyDescriptor[list.size()]);
public Object getPropertyValue(Object id) {
if (TRACE_LOGGER_NAME_PROPERTY_ID.equals(id)) {
return fLogger.getName();
- }
- if (TRACE_LOGGER_LOGLEVEL_PROPERTY_ID.equals(id)) {
+ } else if (TRACE_LOGGER_LOGLEVEL_PROPERTY_ID.equals(id)) {
StringBuffer buffer = new StringBuffer();
- if (fLogger.getLogLevelType() != LogLevelType.LOGLEVEL_NONE) {
+ if (!fLogger.getLogLevelType().equals(LogLevelType.LOGLEVEL_NONE)) {
buffer.append(fLogger.getLogLevelType().getShortName()).append(' ');
}
- buffer.append(fLogger.getLogLevel().name());
+ buffer.append(fLogger.getLogLevel().getInName());
return buffer.toString();
- }
- if (TRACE_LOGGER_STATE_PROPERTY_ID.equals(id)) {
+ } else if (TRACE_LOGGER_STATE_PROPERTY_ID.equals(id)) {
return fLogger.getState().name();
}
return null;
case JUL:
return LTTngControlServiceConstants.OPTION_JUL;
case LOG4J:
+ return LTTngControlServiceConstants.OPTION_LOG4J;
case PYTHON:
+ return LTTngControlServiceConstants.OPTION_PYTHON;
case UNKNOWN:
default:
return TraceDomainType.UNKNOWN.name();
* Command line option for JUL tracer.
*/
String OPTION_JUL = "-j"; //$NON-NLS-1$
+ /**
+ * Command line option for log4j tracer.
+ */
+ String OPTION_LOG4J = "-l"; //$NON-NLS-1$
+ /**
+ * Command line option for python tracer.
+ */
+ String OPTION_PYTHON = "-p"; //$NON-NLS-1$
/**
* Command line option for specifying a session.
*/
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceEnablement;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceEventType;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceJulLogLevel;
+import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLog4jLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLogLevel;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.impl.BaseEventInfo;
import org.eclipse.tracecompass.internal.lttng2.control.core.model.impl.BufferType;
domain.setDomain(TraceDomainType.UST);
break;
case JUL:
- /**
- * TODO: Support for JUL JUL substructure and semantic is not the
- * same as a regular UST or Kernel Domain There is no channel under
- * JUL domain only events. The channel is activated in UST Channel
- */
domain = new DomainInfo(Messages.TraceControl_JULDomainDisplayName);
domain.setDomain(TraceDomainType.JUL);
break;
+ case LOG4J:
+ domain = new DomainInfo(Messages.TraceControl_LOG4JDomainDisplayName);
+ domain.setDomain(TraceDomainType.LOG4J);
+ break;
case UNKNOWN:
domain = new DomainInfo(Messages.TraceControl_UnknownDomainDisplayName);
domain.setDomain(TraceDomainType.UNKNOWN);
allProviders.add(providerInfo);
}
- // Getting the loggers information since those are under the UST provider
- ICommandInput commandJul = createCommand(LTTngControlServiceConstants.COMMAND_LIST, LTTngControlServiceConstants.OPTION_JUL);
- // Execute JUL listing
- ICommandResult resultJul = executeCommand(commandJul, monitor, false);
-
- if (isError(resultJul)) {
- throw new ExecutionException(Messages.TraceControl_CommandError + commandJul.toString());
- }
-
- Document documentJul = getDocumentFromStrings(resultJul.getOutput(), fDocumentBuilder);
- NodeList rawProvidersJul = documentJul.getElementsByTagName(MIStrings.PID);
-
- for (int i = 0; i < rawProvidersJul.getLength(); i++) {
- Node provider = rawProvidersJul.item(i);
- Node name = getFirstOf(provider.getChildNodes(), MIStrings.NAME);
- if (name == null) {
- throw new ExecutionException(Messages.TraceControl_MiInvalidProviderError);
- }
-
- Node id = getFirstOf(provider.getChildNodes(), MIStrings.PID_ID);
+ getUstProviderLoggers(allProviders, TraceDomainType.JUL, monitor);
+ getUstProviderLoggers(allProviders, TraceDomainType.LOG4J, monitor);
- if (id != null) {
- for (int k = 0; k < allProviders.size(); k++) {
- if (allProviders.get(k).getPid() == Integer.parseInt(id.getTextContent())) {
- Node events = getFirstOf(provider.getChildNodes(), MIStrings.EVENTS);
- if (events != null) {
- List<ILoggerInfo> loggers = new ArrayList<>();
- NodeList rawEvents = events.getChildNodes();
- getLoggerInfo(rawEvents, loggers, TraceDomainType.JUL);
- allProviders.get(k).setLoggers(loggers);
- }
- }
- }
- }
- }
return allProviders;
}
loggerInfo.setLogLevelType(LogLevelType.valueOfString(infoNode.getTextContent()));
break;
case MIStrings.LOGLEVEL:
- loggerInfo.setLogLevel(TraceJulLogLevel.valueOfString(infoNode.getTextContent()));
+ switch (domain) {
+ case JUL:
+ loggerInfo.setLogLevel(TraceJulLogLevel.valueOfString(infoNode.getTextContent()));
+ break;
+ case LOG4J:
+ loggerInfo.setLogLevel(TraceLog4jLogLevel.valueOfString(infoNode.getTextContent()));
+ break;
+ //$CASES-OMITTED$
+ default:
+ break;
+ }
break;
case MIStrings.ENABLED:
loggerInfo.setState(TraceEnablement.valueOfString(infoNode.getTextContent()));
return node;
}
+ /**
+ * Retrieve the loggers of a certain domain type for the UST provider.
+ *
+ * @param allProviders
+ * the list of UST providers
+ * @param domain
+ * the loggers domain
+ * @param monitor
+ * progress monitor
+ * @throws ExecutionException
+ */
+ private void getUstProviderLoggers(List<IUstProviderInfo> allProviders, TraceDomainType domain, IProgressMonitor monitor) throws ExecutionException {
+ // Getting the loggers information since those are under the UST provider
+ ICommandInput command = createCommand(LTTngControlServiceConstants.COMMAND_LIST);
+ switch (domain) {
+ case JUL:
+ command.add(LTTngControlServiceConstants.OPTION_JUL);
+ break;
+ case LOG4J:
+ command.add(LTTngControlServiceConstants.OPTION_LOG4J);
+ break;
+ case PYTHON:
+ command.add(LTTngControlServiceConstants.OPTION_PYTHON);
+ break;
+ //$CASES-OMITTED$
+ default:
+ break;
+ }
+ // Execute listing
+ ICommandResult result = executeCommand(command, monitor, false);
+
+ if (isError(result)) {
+ throw new ExecutionException(Messages.TraceControl_CommandError + command.toString());
+ }
+
+ Document document = getDocumentFromStrings(result.getOutput(), fDocumentBuilder);
+ NodeList rawProviders = document.getElementsByTagName(MIStrings.PID);
+
+ for (int i = 0; i < rawProviders.getLength(); i++) {
+ Node provider = rawProviders.item(i);
+ Node name = getFirstOf(provider.getChildNodes(), MIStrings.NAME);
+ if (name == null) {
+ throw new ExecutionException(Messages.TraceControl_MiInvalidProviderError);
+ }
+
+ Node id = getFirstOf(provider.getChildNodes(), MIStrings.PID_ID);
+
+ if (id != null) {
+ for (int k = 0; k < allProviders.size(); k++) {
+ if (allProviders.get(k).getPid() == Integer.parseInt(id.getTextContent())) {
+ Node events = getFirstOf(provider.getChildNodes(), MIStrings.EVENTS);
+ if (events != null) {
+ List<ILoggerInfo> loggers = new ArrayList<>();
+ NodeList rawEvents = events.getChildNodes();
+ getLoggerInfo(rawEvents, loggers, domain);
+ for (ILoggerInfo logger : loggers) {
+ logger.setDomain(domain);
+ }
+ allProviders.get(k).setLoggers(loggers);
+ }
+ }
+ }
+ }
+ }
+ }
+
@Override
public @NonNull List<String> getContextList(IProgressMonitor monitor) throws ExecutionException {
if (!isVersionSupported("2.8.0")) { //$NON-NLS-1$