/********************************************************************** * Copyright (c) 2012, 2015 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: * Bernd Hufmann - Initial API and implementation * Bernd Hufmann - Updated for support of LTTng Tools 2.1 **********************************************************************/ package org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl; import java.util.ArrayList; import java.util.List; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.swt.graphics.Image; import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType; import org.eclipse.tracecompass.internal.lttng2.control.core.model.IChannelInfo; import org.eclipse.tracecompass.internal.lttng2.control.core.model.IEventInfo; 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.TraceChannelOutputType; import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceEnablement; import org.eclipse.tracecompass.internal.lttng2.control.core.model.impl.ChannelInfo; import org.eclipse.tracecompass.internal.lttng2.control.core.model.impl.ProbeEventInfo; 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.ITraceControlComponent; import org.eclipse.tracecompass.internal.lttng2.control.ui.views.property.TraceChannelPropertySource; import org.eclipse.ui.views.properties.IPropertySource; /** * <p> * Implementation of the trace channel component. * </p> * * @author Bernd Hufmann */ public class TraceChannelComponent extends TraceControlComponent { // ------------------------------------------------------------------------ // Constants // ------------------------------------------------------------------------ /** * Path to icon file for this component (state enabled). */ public static final String TRACE_CHANNEL_ICON_FILE_ENABLED = "icons/obj16/channel.gif"; //$NON-NLS-1$ /** * Path to icon file for this component (state disabled). */ public static final String TRACE_CHANNEL_ICON_FILE_DISABLED = "icons/obj16/channel_disabled.gif"; //$NON-NLS-1$ // ------------------------------------------------------------------------ // Attributes // ------------------------------------------------------------------------ /** * The channel information. */ private IChannelInfo fChannelInfo = null; /** * The image to be displayed in disabled state. */ private Image fDisabledImage = null; // ------------------------------------------------------------------------ // Constructors // ------------------------------------------------------------------------ /** * Constructor * @param name - the name of the component. * @param parent - the parent of this component. */ public TraceChannelComponent(String name, ITraceControlComponent parent) { super(name, parent); setImage(TRACE_CHANNEL_ICON_FILE_ENABLED); setToolTip(Messages.TraceControl_ChannelDisplayName); fChannelInfo = new ChannelInfo(name); fDisabledImage = Activator.getDefault().loadIcon(TRACE_CHANNEL_ICON_FILE_DISABLED); } // ------------------------------------------------------------------------ // Accessors // ------------------------------------------------------------------------ @Override public Image getImage() { if (fChannelInfo.getState() == TraceEnablement.DISABLED) { return fDisabledImage; } return super.getImage(); } /** * Sets the channel information. * * @param channelInfo * The channel info to assign to this component */ public void setChannelInfo(IChannelInfo channelInfo) { fChannelInfo = channelInfo; IEventInfo[] events = fChannelInfo.getEvents(); List<ITraceControlComponent> eventComponents = new ArrayList<>(); for (int i = 0; i < events.length; i++) { TraceEventComponent event = null; if (events[i].getClass() == ProbeEventInfo.class) { event = new TraceProbeEventComponent(events[i].getName(), this); } else { event = new TraceEventComponent(events[i].getName(), this); } eventComponents.add(event); event.setEventInfo(events[i]); } if (!eventComponents.isEmpty()) { setChildren(eventComponents); } } /** * @return the overwrite mode value. */ public boolean isOverwriteMode() { return fChannelInfo.isOverwriteMode(); } /** * Sets the overwrite mode value to the given mode. * @param mode - mode to set. */ public void setOverwriteMode(boolean mode){ fChannelInfo.setOverwriteMode(mode); } /** * @return the sub-buffer size. */ public long getSubBufferSize() { return fChannelInfo.getSubBufferSize(); } /** * Sets the sub-buffer size to the given value. * @param bufferSize - size to set to set. */ public void setSubBufferSize(long bufferSize) { fChannelInfo.setSubBufferSize(bufferSize); } /** * @return the number of sub-buffers. */ public int getNumberOfSubBuffers() { return fChannelInfo.getNumberOfSubBuffers(); } /** * Sets the number of sub-buffers to the given value. * @param numberOfSubBuffers - value to set. */ public void setNumberOfSubBuffers(int numberOfSubBuffers) { fChannelInfo.setNumberOfSubBuffers(numberOfSubBuffers); } /** * @return the switch timer interval. */ public long getSwitchTimer() { return fChannelInfo.getSwitchTimer(); } /** * Sets the switch timer interval to the given value. * @param timer - timer value to set. */ public void setSwitchTimer(long timer) { fChannelInfo.setSwitchTimer(timer); } /** * @return the read timer interval. */ public long getReadTimer() { return fChannelInfo.getReadTimer(); } /** * Sets the read timer interval to the given value. * @param timer - timer value to set.. */ public void setReadTimer(long timer) { fChannelInfo.setReadTimer(timer); } /** * @return the output type. */ public TraceChannelOutputType getOutputType() { return fChannelInfo.getOutputType(); } /** * Sets the output type to the given value. * @param type - type to set. */ public void setOutputType(TraceChannelOutputType type) { fChannelInfo.setOutputType(type); } /** * Sets the output type to the given value. * @param type - type to set. */ public void setOutputType(String type) { fChannelInfo.setOutputType(type); } /** * @return the channel state (enabled or disabled). */ public TraceEnablement getState() { return fChannelInfo.getState(); } /** * Sets the channel state (enablement) to the given value. * @param state - state to set. */ public void setState(TraceEnablement state) { fChannelInfo.setState(state); } /** * Sets the channel state (enablement) to the value specified by the given name. * @param stateName - state to set. */ public void setState(String stateName) { fChannelInfo.setState(stateName); } /** * @return number of discarded events */ public long getNumberOfDiscardedEvents() { return fChannelInfo.getNumberOfDiscardedEvents(); } /** * @return number of lost packets */ public long getNumberOfLostPackets() { return fChannelInfo.getNumberOfLostPackets(); } /** * @return maximum size of trace files */ public long getMaxSizeTraceFiles() { return fChannelInfo.getMaxSizeTraceFiles(); } /** * @return maximum number of trace files */ public int getMaxNumberTraceFiles() { return fChannelInfo.getMaxNumberTraceFiles(); } @Override public <T> T getAdapter(Class<T> adapter) { if (adapter == IPropertySource.class) { return adapter.cast(new TraceChannelPropertySource(this)); } return null; } /** * @return session name from parent */ public String getSessionName() { return ((TraceDomainComponent)getParent()).getSessionName(); } /** * @return session from parent */ public TraceSessionComponent getSession() { return ((TraceDomainComponent)getParent()).getSession(); } /** * @return the domain type ({@link TraceDomainType}) */ public TraceDomainType getDomain() { return ((TraceDomainComponent)getParent()).getDomain(); } /** * @return the parent target node */ public TargetNodeComponent getTargetNode() { return ((TraceDomainComponent)getParent()).getTargetNode(); } // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ /** * Enables a list of events with no additional parameters. * * @param eventNames * - a list of event names to enabled. * @param monitor * - a progress monitor * @throws ExecutionException * If the command fails */ public void enableEvents(List<String> eventNames, IProgressMonitor monitor) throws ExecutionException { enableEvents(eventNames, null, null, monitor); } /** * Enables a list of events with no additional parameters. * * @param eventNames * - a list of event names to enabled. * @param filterExpression * - a filter expression * @param excludedEvents * - a list of events to exclude. * @param monitor * - a progress monitor * @throws ExecutionException * If the command fails */ public void enableEvents(List<String> eventNames, String filterExpression, List<String> excludedEvents, IProgressMonitor monitor) throws ExecutionException { getControlService().enableEvents(getSessionName(), getName(), eventNames, getDomain(), filterExpression, excludedEvents, monitor); } /** * Enables all syscalls (for kernel domain) * * @param syscallNames * - a list of syscall to enable * @param monitor * - a progress monitor * @throws ExecutionException * If the command fails */ public void enableSyscalls(List<String> syscallNames, IProgressMonitor monitor) throws ExecutionException { getControlService().enableSyscalls(getSessionName(), getName(), syscallNames, monitor); } /** * Enables a dynamic probe (for kernel domain) * * @param eventName * - event name for probe * @param isFunction * - true for dynamic function entry/return probe else false * @param probe * - the actual probe * @param monitor * - a progress monitor * @throws ExecutionException * If the command fails */ public void enableProbe(String eventName, boolean isFunction, String probe, IProgressMonitor monitor) throws ExecutionException { getControlService().enableProbe(getSessionName(), getName(), eventName, isFunction, probe, monitor); } /** * Enables events using log level. * * @param eventNames * - a list of event names * @param logLevelType * - a log level type * @param level * - a log level * @param filterExpression * - a filter expression * @param domain * - the domain type ({@link TraceDomainType}) * @param monitor * - a progress monitor * @throws ExecutionException * If the command fails */ public void enableLogLevel(List<String> eventNames, LogLevelType logLevelType, ITraceLogLevel level, String filterExpression, TraceDomainType domain, IProgressMonitor monitor) throws ExecutionException { getControlService().enableLogLevel(getSessionName(), getName(), eventNames, logLevelType, level, filterExpression, domain, monitor); } /** * Enables a list of events with no additional parameters. * * @param eventNames * - a list of event names to enabled. * @param monitor * - a progress monitor * @throws ExecutionException * If the command fails */ public void disableEvent(List<String> eventNames, IProgressMonitor monitor) throws ExecutionException { getControlService().disableEvent(getParent().getParent().getName(), getName(), eventNames, getDomain(), monitor); } /** * Add contexts to given channels and or events * * @param contexts * - a list of contexts to add * @param monitor * - a progress monitor * @throws ExecutionException * If the command fails */ public void addContexts(List<String> contexts, IProgressMonitor monitor) throws ExecutionException { getControlService().addContexts(getSessionName(), getName(), null, getDomain(), contexts, monitor); } }