/*
|
* Copyright 2011-17 Fraunhofer ISE, energy & meteo Systems GmbH and other contributors
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*
|
*/
|
package org.openmuc.openiec61850.clientgui;
|
|
import java.awt.GridBagConstraints;
|
import java.awt.GridBagLayout;
|
import java.awt.Insets;
|
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionListener;
|
|
import javax.swing.JButton;
|
import javax.swing.JDialog;
|
import javax.swing.JLabel;
|
import javax.swing.JTextField;
|
|
public class SettingsFrame extends JDialog implements ActionListener {
|
|
private static final long serialVersionUID = -411845634137160667L;
|
|
private int tselLocal1 = 0;
|
private int tselLocal2 = 0;
|
|
private int tselRemote1 = 0;
|
private int tselRemote2 = 1;
|
|
private final JTextField tselLocalField1 = new JTextField(Integer.toString(tselLocal1));
|
private final JTextField tselLocalField2 = new JTextField(Integer.toString(tselLocal2));
|
|
private final JTextField tselRemoteField1 = new JTextField(Integer.toString(tselRemote1));
|
private final JTextField tselRemoteField2 = new JTextField(Integer.toString(tselRemote2));
|
|
public SettingsFrame() {
|
setModalityType(ModalityType.APPLICATION_MODAL);
|
|
final GridBagLayout layout = new GridBagLayout();
|
setLayout(layout);
|
|
this.setSize(200, 120);
|
setLocationRelativeTo(null);
|
|
JLabel label = new JLabel("TSelLocal: ");
|
GridBagConstraints constraint = new GridBagConstraints();
|
constraint.gridwidth = 1;
|
constraint.gridheight = 1;
|
constraint.gridx = 0;
|
constraint.gridy = 0;
|
constraint.insets = new Insets(5, 5, 5, 5);
|
constraint.anchor = GridBagConstraints.WEST;
|
layout.setConstraints(label, constraint);
|
add(label);
|
|
constraint = new GridBagConstraints();
|
constraint.fill = GridBagConstraints.HORIZONTAL;
|
constraint.gridwidth = 1;
|
constraint.gridheight = 1;
|
constraint.gridx = 1;
|
constraint.gridy = 0;
|
constraint.weightx = 1;
|
constraint.insets = new Insets(5, 5, 5, 5);
|
constraint.anchor = GridBagConstraints.WEST;
|
layout.setConstraints(tselLocalField1, constraint);
|
add(tselLocalField1);
|
|
constraint = new GridBagConstraints();
|
constraint.fill = GridBagConstraints.HORIZONTAL;
|
constraint.gridwidth = 1;
|
constraint.gridheight = 1;
|
constraint.gridx = 2;
|
constraint.gridy = 0;
|
constraint.weightx = 1;
|
constraint.insets = new Insets(5, 5, 5, 5);
|
constraint.anchor = GridBagConstraints.WEST;
|
layout.setConstraints(tselLocalField2, constraint);
|
add(tselLocalField2);
|
|
label = new JLabel("TSelRemote: ");
|
constraint = new GridBagConstraints();
|
constraint.gridwidth = 1;
|
constraint.gridheight = 1;
|
constraint.gridx = 0;
|
constraint.gridy = 1;
|
constraint.insets = new Insets(5, 5, 5, 5);
|
constraint.anchor = GridBagConstraints.WEST;
|
layout.setConstraints(label, constraint);
|
add(label);
|
|
constraint = new GridBagConstraints();
|
constraint.fill = GridBagConstraints.HORIZONTAL;
|
constraint.gridwidth = 1;
|
constraint.gridheight = 1;
|
constraint.gridx = 1;
|
constraint.gridy = 1;
|
constraint.weightx = 1;
|
constraint.insets = new Insets(5, 5, 5, 5);
|
constraint.anchor = GridBagConstraints.WEST;
|
layout.setConstraints(tselRemoteField1, constraint);
|
add(tselRemoteField1);
|
|
constraint = new GridBagConstraints();
|
constraint.fill = GridBagConstraints.HORIZONTAL;
|
constraint.gridwidth = 1;
|
constraint.gridheight = 1;
|
constraint.gridx = 2;
|
constraint.gridy = 1;
|
constraint.weightx = 1;
|
constraint.insets = new Insets(5, 5, 5, 5);
|
constraint.anchor = GridBagConstraints.WEST;
|
layout.setConstraints(tselRemoteField2, constraint);
|
add(tselRemoteField2);
|
|
JButton button = new JButton("Cancel");
|
button.setActionCommand("Cancel");
|
button.addActionListener(this);
|
constraint.gridwidth = 1;
|
constraint.gridheight = 1;
|
constraint.gridx = 0;
|
constraint.gridy = 2;
|
constraint.insets = new Insets(5, 5, 5, 5);
|
constraint.anchor = GridBagConstraints.SOUTHWEST;
|
layout.setConstraints(button, constraint);
|
add(button);
|
|
button = new JButton("OK");
|
button.setActionCommand("Okay");
|
button.addActionListener(this);
|
constraint.gridwidth = 2;
|
constraint.gridheight = 1;
|
constraint.gridx = 1;
|
constraint.gridy = 2;
|
constraint.insets = new Insets(5, 5, 5, 5);
|
constraint.anchor = GridBagConstraints.SOUTHWEST;
|
layout.setConstraints(button, constraint);
|
add(button);
|
}
|
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
if ("cancel".equalsIgnoreCase(e.getActionCommand())) {
|
tselLocalField1.setText(Integer.toString(tselLocal1 & 0xFF));
|
tselLocalField2.setText(Integer.toString(tselLocal2 & 0xFF));
|
tselRemoteField1.setText(Integer.toString(tselRemote1 & 0xFF));
|
tselRemoteField2.setText(Integer.toString(tselRemote2 & 0xFF));
|
setVisible(false);
|
}
|
else if ("okay".equalsIgnoreCase(e.getActionCommand())) {
|
tselLocal1 = parseTextField(tselLocalField1, tselLocal1);
|
tselLocal2 = parseTextField(tselLocalField2, tselLocal2);
|
tselRemote1 = parseTextField(tselRemoteField1, tselRemote1);
|
tselRemote2 = parseTextField(tselRemoteField2, tselRemote2);
|
setVisible(false);
|
}
|
}
|
|
public byte[] getTselLocal() {
|
return new byte[] { (byte) tselLocal1, (byte) tselLocal2 };
|
}
|
|
public byte[] getTselRemote() {
|
return new byte[] { (byte) tselRemote1, (byte) tselRemote2 };
|
}
|
|
public void setTselLocal(byte[] tsel) {
|
if (tsel.length != 2) {
|
throw new IllegalArgumentException("TSel must consist of 2 bytes");
|
}
|
tselLocal1 = tsel[0];
|
tselLocal2 = tsel[1];
|
|
tselLocalField1.setText(Integer.toString(tselLocal1 & 0xFF));
|
tselLocalField2.setText(Integer.toString(tselLocal2 & 0xFF));
|
}
|
|
public void setTselRemote(byte[] tsel) {
|
if (tsel.length != 2) {
|
throw new IllegalArgumentException("TSel must consist of 2 bytes");
|
}
|
tselRemote1 = tsel[0];
|
tselRemote2 = tsel[1];
|
|
tselRemoteField1.setText(Integer.toString(tselRemote1 & 0xFF));
|
tselRemoteField2.setText(Integer.toString(tselRemote2 & 0xFF));
|
}
|
|
private int parseTextField(JTextField field, int oldValue) {
|
int value = oldValue;
|
try {
|
int newValue = Integer.parseInt(field.getText());
|
if (newValue >= 0 && newValue <= 255) {
|
value = newValue;
|
}
|
} catch (NumberFormatException e) {
|
return oldValue;
|
}
|
return value;
|
}
|
}
|