package me.legrange.panstamp.gui.view; import java.awt.BorderLayout; import java.util.HashMap; import java.util.Map; import javax.swing.JFrame; import me.legrange.panstamp.Endpoint; import me.legrange.panstamp.PanStamp; import me.legrange.panstamp.gui.model.Model; /** * Create and lookup charts in frames for different data sources. * * @author gideon */ public class ChartFactory { public static ChartFactory getFactory(Model model) { ChartFactory fact = facts.get(model); if (fact == null) { fact = new ChartFactory(model); facts.put(model, fact); } return fact; } public JFrame getSignalChart(PanStamp ps) { JFrame frame = signalCharts.get(ps); if (frame == null) { frame = frameChart(new SignalChart(ps.getAddress(), model.getSignalDataSet(ps))); signalCharts.put(ps, frame); } return frame; } public JFrame getEndpointChart(Endpoint ep) { JFrame frame = endpointCharts.get(ep); if (frame == null) { frame = frameChart(new EndpointChart(model.getEndpointDataSet(ep))); endpointCharts.put(ep, frame); } return frame; } private JFrame frameChart(Chart chart) { JFrame frame = new JFrame(); frame.setLocationRelativeTo(null); frame.setLayout(new BorderLayout()); frame.setTitle(chart.getTitle()); frame.setContentPane(chart); frame.setSize(chart.getSize()); frame.setResizable(false); return frame; } private ChartFactory(Model model) { this.model = model; } private final Model model; private final Map<PanStamp, JFrame> signalCharts = new HashMap<>(); private final Map<Endpoint, JFrame> endpointCharts = new HashMap<>(); private final static Map<Model, ChartFactory> facts = new HashMap<>(); }