/******************************************************************************* * Copyright (c) 2013, 2014 Ericsson and others. * 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: * Marc Dumais (Ericsson) - Initial API and implementation (Bug 407321) *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.view; import java.util.Hashtable; import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.model.IVisualizerModelObject; import org.eclipse.cdt.dsf.service.DsfSession; import org.eclipse.cdt.dsf.service.DsfSession.SessionEndedListener; /** * Manages the canvas filters for all current debug sessions. */ public class MulticoreVisualizerCanvasFilterManager implements SessionEndedListener { /** map containing the filter lists for different debug sessions */ private Hashtable<String,MulticoreVisualizerCanvasFilter> m_filterSessionMap = null; /** reference to the canvas */ private MulticoreVisualizerCanvas m_canvas = null; /** filter currently in place */ private MulticoreVisualizerCanvasFilter m_currentFilter = null; /** Constructor */ public MulticoreVisualizerCanvasFilterManager(MulticoreVisualizerCanvas canvas) { m_filterSessionMap = new Hashtable<String,MulticoreVisualizerCanvasFilter>(); m_canvas = canvas; // add listener to be notified when a debug session ends DsfSession.addSessionEndedListener(this); } /** dispose method */ public void dispose() { // remove listener DsfSession.removeSessionEndedListener(this); // dispose of any filter if (m_filterSessionMap != null) { for (MulticoreVisualizerCanvasFilter filter : m_filterSessionMap.values()) { filter.dispose(); } m_filterSessionMap.clear(); m_filterSessionMap = null; } m_canvas = null; m_currentFilter = null; } /** * Returns the filter for a given debug session if it exists, or else * creates a new filter for that session. */ public MulticoreVisualizerCanvasFilter getFilter(String sessionId) { MulticoreVisualizerCanvasFilter filter = null; // already a filter for this session ? filter = m_filterSessionMap.get(sessionId); // no filter yet for this session? Create one if (filter == null) { // create one filter = new MulticoreVisualizerCanvasFilter(m_canvas); m_filterSessionMap.put(sessionId, filter); } return filter; } /** Removes the filter in place for a given debug session, if any. */ public void removeFilter(String sessionId) { if (m_filterSessionMap.containsKey(sessionId)) { m_filterSessionMap.remove(sessionId); } } /** Re-computes the current filter to reflect latest model changes */ public void updateCurrentFilter() { if( m_currentFilter != null) { m_currentFilter.updateFilter(); } } /** Sets-up a filter, based on the current canvas selection */ public void applyFilter() { if( m_currentFilter != null) { m_currentFilter.applyFilter(); } } /** Clears the current filter */ public void clearFilter() { if( m_currentFilter != null) { m_currentFilter.clearFilter(); } } /** Sets the current filter for a given model/session */ public void setCurrentFilter(String sessionId) { if (sessionId == null) { m_currentFilter = null; } else { m_currentFilter = getFilter(sessionId); } } /** Returns the current filter */ public MulticoreVisualizerCanvasFilter getCurrentFilter() { return m_currentFilter; } /** Checks if the current filter is active */ public boolean isCurrentFilterActive() { if( m_currentFilter != null) { return m_currentFilter.isFilterActive(); } return false; } /** Checks if the current filter permits the display of an object */ public boolean displayObject(final IVisualizerModelObject obj) { if( m_currentFilter != null) { return m_currentFilter.displayObject(obj); } return false; } @Override public void sessionEnded(DsfSession session) { // session has ended - remove corresponding filter removeFilter(session.getId()); } }