230 lines
6.7 KiB
Java
230 lines
6.7 KiB
Java
package org.hwo.pulscounter;
|
|
|
|
import java.awt.EventQueue;
|
|
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JPanel;
|
|
|
|
import java.awt.BorderLayout;
|
|
|
|
import javax.swing.JButton;
|
|
|
|
import java.awt.GridBagLayout;
|
|
import java.awt.GridBagConstraints;
|
|
|
|
import javax.swing.JLabel;
|
|
import javax.swing.JComboBox;
|
|
|
|
import org.hwo.csv.CSV;
|
|
import org.hwo.io.SerialPort;
|
|
import org.hwo.models.TableMapper.TableMapper;
|
|
|
|
import java.awt.Insets;
|
|
import java.util.ArrayList;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.prefs.Preferences;
|
|
|
|
import javax.swing.JTable;
|
|
import javax.swing.JScrollPane;
|
|
|
|
import java.awt.event.ActionListener;
|
|
import java.awt.event.ActionEvent;
|
|
|
|
public class PulsCounterWindow extends JFrame{
|
|
private JComboBox cbInterfaces;
|
|
private JTable tCounter;
|
|
|
|
private TableMapper tmCounter;
|
|
private Preferences prefs;
|
|
private List<CounterChannel> counterChannels;
|
|
|
|
List<TimeBarrier> timeBarriers;
|
|
|
|
|
|
public PulsCounterWindow() {
|
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
setBounds(100, 100, 732, 350);
|
|
setTitle("PulsCounter");
|
|
GridBagLayout gridBagLayout = new GridBagLayout();
|
|
gridBagLayout.columnWidths = new int[]{0, 0};
|
|
gridBagLayout.rowHeights = new int[]{0, 0, 0};
|
|
gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE};
|
|
gridBagLayout.rowWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
|
|
getContentPane().setLayout(gridBagLayout);
|
|
|
|
JPanel panel = new JPanel();
|
|
GridBagConstraints gbc_panel = new GridBagConstraints();
|
|
gbc_panel.insets = new Insets(0, 0, 5, 0);
|
|
gbc_panel.fill = GridBagConstraints.BOTH;
|
|
gbc_panel.gridx = 0;
|
|
gbc_panel.gridy = 0;
|
|
getContentPane().add(panel, gbc_panel);
|
|
GridBagLayout gbl_panel = new GridBagLayout();
|
|
gbl_panel.columnWidths = new int[]{0, 0, 0, 0, 0, 0};
|
|
gbl_panel.rowHeights = new int[]{0, 0, 0};
|
|
gbl_panel.columnWeights = new double[]{0.0, 1.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
|
|
gbl_panel.rowWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
|
|
panel.setLayout(gbl_panel);
|
|
|
|
JLabel lblNewLabel = new JLabel("Schnittstelle:");
|
|
GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
|
|
gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5);
|
|
gbc_lblNewLabel.anchor = GridBagConstraints.WEST;
|
|
gbc_lblNewLabel.gridx = 0;
|
|
gbc_lblNewLabel.gridy = 0;
|
|
panel.add(lblNewLabel, gbc_lblNewLabel);
|
|
|
|
cbInterfaces = new JComboBox();
|
|
cbInterfaces.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent arg0) {
|
|
|
|
System.err.println("Save Pref PORT");
|
|
|
|
prefs.put("io.port", cbInterfaces.getSelectedItem().toString());
|
|
try
|
|
{
|
|
prefs.sync();
|
|
} catch (Exception e)
|
|
{
|
|
System.err.println("Exception: " + e);
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
});
|
|
GridBagConstraints gbc_cbInterfaces = new GridBagConstraints();
|
|
gbc_cbInterfaces.insets = new Insets(0, 0, 5, 5);
|
|
gbc_cbInterfaces.fill = GridBagConstraints.HORIZONTAL;
|
|
gbc_cbInterfaces.gridx = 1;
|
|
gbc_cbInterfaces.gridy = 0;
|
|
panel.add(cbInterfaces, gbc_cbInterfaces);
|
|
|
|
JButton btnNewButton = new JButton("Jetzt aktualisieren...");
|
|
btnNewButton.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent arg0) {
|
|
updateCounter();
|
|
}
|
|
});
|
|
GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
|
|
gbc_btnNewButton.insets = new Insets(0, 0, 5, 5);
|
|
gbc_btnNewButton.gridx = 2;
|
|
gbc_btnNewButton.gridy = 0;
|
|
panel.add(btnNewButton, gbc_btnNewButton);
|
|
|
|
JButton btnTagesdateiSchreiben = new JButton("Tagesdatei schreiben...");
|
|
btnTagesdateiSchreiben.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent arg0) {
|
|
writeDayFile();
|
|
}
|
|
});
|
|
GridBagConstraints gbc_btnTagesdateiSchreiben = new GridBagConstraints();
|
|
gbc_btnTagesdateiSchreiben.insets = new Insets(0, 0, 5, 5);
|
|
gbc_btnTagesdateiSchreiben.gridx = 3;
|
|
gbc_btnTagesdateiSchreiben.gridy = 0;
|
|
panel.add(btnTagesdateiSchreiben, gbc_btnTagesdateiSchreiben);
|
|
|
|
JButton btnNewButton_1 = new JButton("New button");
|
|
GridBagConstraints gbc_btnNewButton_1 = new GridBagConstraints();
|
|
gbc_btnNewButton_1.insets = new Insets(0, 0, 5, 0);
|
|
gbc_btnNewButton_1.gridx = 4;
|
|
gbc_btnNewButton_1.gridy = 0;
|
|
panel.add(btnNewButton_1, gbc_btnNewButton_1);
|
|
|
|
JScrollPane scrollPane = new JScrollPane();
|
|
GridBagConstraints gbc_scrollPane = new GridBagConstraints();
|
|
gbc_scrollPane.fill = GridBagConstraints.BOTH;
|
|
gbc_scrollPane.gridx = 0;
|
|
gbc_scrollPane.gridy = 1;
|
|
getContentPane().add(scrollPane, gbc_scrollPane);
|
|
|
|
tCounter = new JTable();
|
|
scrollPane.setViewportView(tCounter);
|
|
|
|
|
|
initialize();
|
|
}
|
|
|
|
private void initialize() {
|
|
|
|
prefs = Preferences.userRoot();
|
|
|
|
String defaultPort = prefs.get("io.port", "COM1");
|
|
|
|
for (String portName:SerialPort.getPortNames())
|
|
cbInterfaces.addItem(portName);
|
|
|
|
System.err.println("Default Port: " + defaultPort);
|
|
|
|
for (int i=0;i < cbInterfaces.getItemCount();i++)
|
|
{
|
|
if (cbInterfaces.getItemAt(i).equals(defaultPort))
|
|
cbInterfaces.setSelectedIndex(i);
|
|
}
|
|
|
|
counterChannels = new ArrayList<CounterChannel>();
|
|
for (int i=0;i<32;i++)
|
|
counterChannels.add(new CounterChannel( i + 1) );
|
|
|
|
tmCounter = new TableMapper(CounterChannel.class, tCounter);
|
|
tmCounter.setRows(counterChannels);
|
|
tmCounter.getColumnInfo().get(0).setReadOnly(true);
|
|
tmCounter.getColumnInfo().get(1).setReadOnly(true);
|
|
tmCounter.getColumnInfo().get(3).setReadOnly(true);
|
|
|
|
timeBarriers = new ArrayList<TimeBarrier>();
|
|
|
|
timeBarriers.add(new TimeBarrier(01,00));
|
|
timeBarriers.add(new TimeBarrier(03,00));
|
|
timeBarriers.add(new TimeBarrier(06,00));
|
|
|
|
}
|
|
|
|
private void updateCounter()
|
|
{
|
|
PulsCounterInterface intf = new PulsCounterInterface(cbInterfaces.getSelectedItem().toString());
|
|
|
|
List<Integer> values = intf.readCounter();
|
|
for (int i=0;i<values.size();i++)
|
|
{
|
|
counterChannels.get(i).value = values.get(i);
|
|
values.set(i, values.get(i) + counterChannels.get(i).correct);
|
|
}
|
|
|
|
tCounter.repaint();
|
|
|
|
for (TimeBarrier tb:timeBarriers)
|
|
{
|
|
tb.update(values);
|
|
tb.save();
|
|
}
|
|
}
|
|
|
|
private void writeDayFile()
|
|
{
|
|
CSV csv = new CSV();
|
|
Date date = new Date();
|
|
|
|
String[] row = new String[this.timeBarriers.size() + 1];
|
|
|
|
row[0] = "";
|
|
for (int n=1;n<row.length;n++)
|
|
{
|
|
row[n] = String.format("%02d:%02d", (timeBarriers.get(n-1).timeOfDay / 60),(timeBarriers.get(n-1).timeOfDay % 60));
|
|
}
|
|
csv.getCells().add(row);
|
|
|
|
for (int i=0;i<this.counterChannels.size();i++)
|
|
{
|
|
row = new String[this.timeBarriers.size() + 1];
|
|
row[0] = new Integer(i + 1).toString();
|
|
for (int n=1;n<row.length;n++)
|
|
row[n] = timeBarriers.get(n-1).values.get(i).toString();
|
|
csv.getCells().add(row);
|
|
}
|
|
|
|
csv.saveToFile(String.format("daily-%d-%d-%d.csv",(date.getYear()+1900),date.getMonth()+1,date.getDate()+1));
|
|
|
|
}
|
|
|
|
}
|