package de.javasoft.synthetica.democenter.examples.systemmonitor;

import static de.javasoft.synthetica.addons.systemmonitor.CollectorFactory.CollectorID.CPU_USAGE;
import static de.javasoft.synthetica.addons.systemmonitor.CollectorFactory.CollectorID.THREADS;
import static de.javasoft.synthetica.addons.systemmonitor.CollectorFactory.CollectorID.PHYSICAL_MEMORY_USAGE;
import static de.javasoft.synthetica.addons.systemmonitor.CollectorFactory.CollectorID.HEAP_MEMORY_USAGE;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;

import de.javasoft.swing.SystemMonitor;
import de.javasoft.synthetica.addons.systemmonitor.CollectorFactory;

/**
 * A simple SystemMonitor application to demonstrate and explain  
 * basic functionality.
 */
@SuppressWarnings("serial")
public class SimpleSystemMonitor extends JFrame
{
  public SimpleSystemMonitor()
  {
    super("Simple SystemMonitor");
    setLayout(new BorderLayout());

//@highlight
    SystemMonitor monitor = new SystemMonitor();
    monitor.addCollector(PHYSICAL_MEMORY_USAGE.id, CollectorFactory.getFactory().createCollector(PHYSICAL_MEMORY_USAGE.id));
    monitor.addCollector(THREADS.id, 750, CollectorFactory.getFactory().createCollector(THREADS.id));
    monitor.addCollector(HEAP_MEMORY_USAGE.id, CollectorFactory.getFactory().createCollector(HEAP_MEMORY_USAGE.id));
    monitor.addCollector(CPU_USAGE.id, 1000, CollectorFactory.getFactory().createCollector(CPU_USAGE.id));

    monitor.addCaption(CPU_USAGE.id, "CPU Usage:", "%{percentValue}.0f%%", false);
    monitor.addCaption(THREADS.id, "Threads:", "%{value},.0f / %{maxValue},.0f (Peak)", false);
    monitor.addCaption(HEAP_MEMORY_USAGE.id, "Heap Usage:", "%{value},.2fMB / %{maxValue},.2fMB / %{percentValue}.0f%%", false);
    monitor.addCaption(PHYSICAL_MEMORY_USAGE.id, "OS-Memory:", "%{value},.0fMB / %{maxValue},.0fMB", true);
    
    //enable MonitorPopup ToolTip
    monitor.setPopupEnabled(true);
//@/highlight

    add(monitor);
    ((JComponent)getContentPane()).setBorder(new EmptyBorder(10,10,10,10));
    //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);      
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    setSize(400, 300);
    setLocationRelativeTo(null);        //center
    setVisible(true);
  }

  /**
   * Static main method for application startup. 
   */
  public static void main(String[] args)
  {
    EventQueue.invokeLater(new Runnable()
    {
      public void run()
      {
        try
        {
          UIManager.setLookAndFeel("de.javasoft.plaf.synthetica.SyntheticaStandardLookAndFeel");
          new SimpleSystemMonitor();
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }
      }
    });
  }
}
