package com.limegroup.gnutella.gui.statistics;
import java.awt.Component;
import javax.swing.JComponent;
import com.limegroup.gnutella.gui.GUIMediator;
import com.limegroup.gnutella.gui.RefreshListener;
import com.limegroup.gnutella.gui.themes.ThemeObserver;
import com.limegroup.gnutella.statistics.StatisticsManager;
/**
* This class acts as a mediator for the different components of the statistics
* window. This class maintains references to the
* <tt>StatisticsTreeManager</tt> and <tt>StatisticsPaneManager</tt>, the two
* primary classes that it delegates to.
*/
//2345678|012345678|012345678|012345678|012345678|012345678|012345678|012345678|
public final class StatisticsMediator implements RefreshListener, ThemeObserver {
/**
* Constant for the key for the root node in the tree.
*/
public final static String ROOT_NODE_KEY = "STATISTICS_ROOT_NODE";
/**
* Singleton constant for easy access to the statistics mediator.
*/
private final static StatisticsMediator INSTANCE =
new StatisticsMediator();
/**
* Constant for the class that manages the tree that controls which
* option window is currently selected. It is fine to construct these
* her since they do not reference this class.
*/
private static StatisticsTreeManager _treeManager = null;
/**
* Constant for the class that manages the current statistics pane
* displayed to the user. It is fine to construct these here since
* they do not reference this class.
*/
private static StatisticsPaneManager _paneManager = null;
/**
* Constant for the class that handles constructing all of the
* elements of the statistics windows.
*/
private static StatisticsConstructor _constructor = null;
/**
* Singleton accessor for this class.
*
* @return the <tt>StatisticsMediator</tt> instance
*/
public static synchronized StatisticsMediator instance() {
return INSTANCE;
}
/**
* Private constructor to ensure that this class cannot be constructed
* from another class. The constructor does very little to alleviate
* construction conflicts with classes that may use the mediator.
*/
private StatisticsMediator() {
GUIMediator.setSplashScreenString(
GUIMediator.getStringResource("SPLASH_STATUS_STATISTICS_WINDOW"));
}
/**
* Makes the statistics window either visible or not visible depending
* on the boolean argument.
*
* @param visible <tt>boolean</tt> value specifying whether the
* statistics window should be made visible or not
* visible
*/
public final void setStatisticsVisible(boolean visible) {
if(_constructor == null) {
if(!visible)
return;
updateTheme();
}
_constructor.setStatisticsVisible(visible);
}
/**
* Returns whether or not the statistics window is visible.
*
* @return <tt>true</tt> is the statistics window is visible,
* <tt>false</tt> otherwise
*/
public final boolean isStatisticsVisible() {
if(_constructor == null)
return false;
return _constructor.isStatisticsVisible();
}
/**
* Handles the selection of a new panel as the currently visible panel.
*
* @param key the unique identifying key of the panel to show
*/
public final void handleSelection(final String key) {
_paneManager.show(key);
}
/**
* Returns the main <tt>JComponent</tt> instance for the statistics window,
* allowing other components to position themselves accordingly.
*
* @return the main statistics <tt>JComponent</tt> window
*/
public Component getMainStatisticsComponent() {
if(_constructor == null)
updateTheme();
return StatisticsConstructor.getMainComponent();
}
public JComponent getComponent() {
if(_constructor == null)
updateTheme();
return StatisticsConstructor.getComponent();
}
/**
* Accessor for the component that contains the displayed statistics,
* as opposed to the navigational component.
*
* @return the component that contains the displayed statistics,
* as opposed to the navigational component
*/
public static JComponent getStatDisplayComponent() {
if(_constructor == null)
INSTANCE.updateTheme();
return StatisticsConstructor.getStatDisplayComponent();
}
/**
* Implements <tt>RefreshListener</tt>.<p>
*
* Refreshes all statistics.
*/
public void refresh() {
if(this.isStatisticsVisible()) {
_paneManager.refresh();
}
}
/**
* Sets the visibility state of the advanced statistics.
*
* @param visible the visibility state to apply
*/
public void setAdvancedStatsVisible(boolean visible) {
if(_constructor == null)
updateTheme();
StatisticsManager.instance().setRecordAdvancedStats(visible);
StatisticsConstructor.setAdvancedStatsVisible(visible);
}
/**
* Updates the theme by reconstructing the necessary components.
*/
public void updateTheme() {
_treeManager = new StatisticsTreeManager();
_paneManager = new StatisticsPaneManager();
_constructor = new StatisticsConstructor(_treeManager, _paneManager);
}
// public static void main(String args[]) {
// StatisticsMediator mediator = StatisticsMediator.instance();
// mediator.setStatisticsVisible(true);
// }
}