/*
* #%L
* =====================================================
* _____ _ ____ _ _ _ _
* |_ _|_ __ _ _ ___| |_ / __ \| | | | ___ | | | |
* | | | '__| | | / __| __|/ / _` | |_| |/ __|| |_| |
* | | | | | |_| \__ \ |_| | (_| | _ |\__ \| _ |
* |_| |_| \__,_|___/\__|\ \__,_|_| |_||___/|_| |_|
* \____/
*
* =====================================================
*
* Hochschule Hannover
* (University of Applied Sciences and Arts, Hannover)
* Faculty IV, Dept. of Computer Science
* Ricklinger Stadtweg 118, 30459 Hannover, Germany
*
* Email: trust@f4-i.fh-hannover.de
* Website: http://trust.f4.hs-hannover.de/
*
* This file is part of visitmeta-visualization, version 0.6.0,
* implemented by the Trust@HsH research group at the Hochschule Hannover.
* %%
* Copyright (C) 2012 - 2016 Trust@HsH
* %%
* 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.
* #L%
*/
package de.hshannover.f4.trust.visitmeta.gui;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
import org.apache.log4j.Logger;
import de.hshannover.f4.trust.visitmeta.datawrapper.SettingManager;
public class WindowSettings extends JFrame {
private static final long serialVersionUID = 1L;
private static final Logger LOGGER = Logger.getLogger(WindowSettings.class);
private SettingManager mSettingManager = null;
private JPanel mPanel = null;
private SpringLayout mSpringLayout = null;
private JTextField mInputNetworkInterval = null;
private JTextField mInputCalculationInterval = null;
private JTextField mInputCalculationIterations = null;
private JTextField mInputHighlightsTimeout = null;
private JTextField mInputNodeTranslationDuration = null;
private JLabel mLabelNetwork = null;
private JLabel mLabelCalculation = null;
private JLabel mLabelIterations = null;
private JLabel mLabelHighlights = null;
private JLabel mLabelNodeTranslationDuration = null;
private JPanel mPanelButton = null;
private JButton mButtonSave = null;
private JButton mButtonCancel = null;
private String mNetworkInterval = null;
private String mCalculationInterval = null;
private String mCalculationIterations = null;
private String mHighlightsTimeout = null;
private String mNodeTranslationDuration = null;
/**
* Calls the init() method to initialize the settings window
*/
public WindowSettings(SettingManager settingManager) {
super();
init(settingManager);
pack();
}
/**
* Initializes a settings window
* @param settingManager
*/
private void init(SettingManager settingManager) {
LOGGER.trace("Init Settings Window");
initWindow(settingManager);
loadSettings();
initInputFields();
initSaveButton();
initCancelButton();
setElements();
addElements();
}
/**
* Initializes the main components
* @param settingManager
*/
private void initWindow(SettingManager settingManager) {
mSettingManager = settingManager;
mPanel = new JPanel();
mSpringLayout = new SpringLayout();
setTitle("Timing Settings");
setMinimumSize(new Dimension(200, 195));
setPreferredSize(new Dimension(290, 195));
}
/**
* Loads previous saved settings
*/
private void loadSettings() {
mNetworkInterval = Integer.toString(mSettingManager.getNetworkInterval());
mCalculationInterval = Integer.toString(mSettingManager.getCalculationInterval());
mCalculationIterations = Integer.toString(mSettingManager.getCalculationIterations());
mHighlightsTimeout = Integer.toString(mSettingManager.getHighlightsTimeout());
mNodeTranslationDuration = Integer.toString(mSettingManager.getNodeTranslationDuration());
}
/**
* Initializes the input fields and their labels
*/
private void initInputFields() {
mInputNetworkInterval = new JTextField(mNetworkInterval, 10);
mLabelNetwork = new JLabel("Network Interval");
mInputCalculationInterval = new JTextField(mCalculationInterval, 10);
mLabelCalculation = new JLabel("Calculation Interval");
mInputCalculationIterations = new JTextField(mCalculationIterations, 10);
mLabelIterations = new JLabel("Calculation Iterations");
mInputHighlightsTimeout = new JTextField(mHighlightsTimeout, 10);
mLabelHighlights = new JLabel("Highlights Timeout");
mInputNodeTranslationDuration = new JTextField(mNodeTranslationDuration, 10);
mLabelNodeTranslationDuration = new JLabel("Translation Duration");
}
/**
* Initializes the save button and adds an ActionListener
*/
private void initSaveButton() {
mButtonSave = new JButton("Save");
mButtonSave.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean hasChanged = false;
int vNetworkInterval = -1;
int vCalculationInterval = -1;
int vCalculationIterations = -1;
int vHighlightsTimeout = -1;
int vNodeTranslationDuration = -1;
if (!mInputNetworkInterval.getText().equals(mNetworkInterval)) {
try {
vNetworkInterval = Integer.parseInt(mInputNetworkInterval.getText());
hasChanged = true;
} catch (NumberFormatException ex) {
mInputNetworkInterval.setText(mNetworkInterval);
}
}
if (!mInputCalculationInterval.getText().equals(mCalculationInterval)) {
try {
vCalculationInterval = Integer.parseInt(mInputCalculationInterval.getText());
hasChanged = true;
} catch (NumberFormatException ex) {
mInputCalculationInterval.setText(mCalculationInterval);
}
}
if (!mInputCalculationIterations.getText().equals(mCalculationIterations)) {
try {
vCalculationIterations = Integer.parseInt(mInputCalculationIterations.getText());
hasChanged = true;
} catch (NumberFormatException ex) {
mInputCalculationIterations.setText(mCalculationIterations);
}
}
if (!mInputHighlightsTimeout.getText().equals(mHighlightsTimeout)) {
try {
vHighlightsTimeout = Integer.parseInt(mInputHighlightsTimeout.getText());
hasChanged = true;
} catch (NumberFormatException ex) {
mInputHighlightsTimeout.setText(mHighlightsTimeout);
}
}
if (!mInputNodeTranslationDuration.getText().equals(mNodeTranslationDuration)) {
try {
vNodeTranslationDuration = Integer.parseInt(mInputNodeTranslationDuration.getText());
hasChanged = true;
} catch (NumberFormatException ex) {
mInputNodeTranslationDuration.setText(mNodeTranslationDuration);
}
}
if (hasChanged) {
LOGGER.debug("Save changed window settings.");
if (vNetworkInterval > 0) {
mSettingManager.setNetworkInterval(vNetworkInterval);
mNetworkInterval = mInputNetworkInterval.getText();
}
if (vCalculationInterval > 0) {
mSettingManager.setCalculationInterval(vCalculationInterval);
mCalculationInterval = mInputCalculationInterval.getText();
}
if (vCalculationIterations > 0) {
mSettingManager.setCalculationIterations(vCalculationIterations);
mCalculationIterations = mInputCalculationIterations.getText();
}
if (vHighlightsTimeout >= 0) {
mSettingManager.setHighlightsTimeout(vHighlightsTimeout);
mHighlightsTimeout = mInputHighlightsTimeout.getText();
}
if (vNodeTranslationDuration >= 0) {
mSettingManager.setNodeTranslationDuration(vNodeTranslationDuration);
mNodeTranslationDuration = mInputNodeTranslationDuration.getText();
}
mSettingManager.notifyObservers();
}
setVisible(false);
}
});
}
/**
* Initializes the cancel button and adds an ActionListener
*/
private void initCancelButton() {
mButtonCancel = new JButton("Cancel");
mButtonCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
mInputNetworkInterval.setText(mNetworkInterval);
mInputCalculationInterval.setText(mCalculationInterval);
mInputCalculationIterations.setText(mCalculationIterations);
mInputHighlightsTimeout.setText(mHighlightsTimeout);
mInputNodeTranslationDuration.setText(mNodeTranslationDuration);
setVisible(false);
}
});
}
/**
* Arranges the elements in a SpringLayout
*/
private void setElements() {
mPanel.setLayout(mSpringLayout);
mSpringLayout.putConstraint(SpringLayout.NORTH, mLabelNetwork, 10, SpringLayout.NORTH, mPanel);
mSpringLayout.putConstraint(SpringLayout.NORTH, mInputNetworkInterval, 5, SpringLayout.NORTH, mPanel);
mSpringLayout.putConstraint(SpringLayout.WEST, mLabelNetwork, 5, SpringLayout.WEST, mPanel);
mSpringLayout.putConstraint(SpringLayout.WEST, mInputNetworkInterval, 5, SpringLayout.EAST, mLabelIterations);
mSpringLayout.putConstraint(SpringLayout.EAST, mInputNetworkInterval, -5, SpringLayout.EAST, mPanel);
mSpringLayout.putConstraint(SpringLayout.NORTH, mLabelCalculation, 10, SpringLayout.SOUTH,
mInputNetworkInterval);
mSpringLayout.putConstraint(SpringLayout.NORTH, mInputCalculationInterval, 5, SpringLayout.SOUTH,
mInputNetworkInterval);
mSpringLayout.putConstraint(SpringLayout.WEST, mLabelCalculation, 5, SpringLayout.WEST, mPanel);
mSpringLayout.putConstraint(SpringLayout.WEST, mInputCalculationInterval, 5, SpringLayout.EAST,
mLabelIterations);
mSpringLayout.putConstraint(SpringLayout.EAST, mInputCalculationInterval, -5, SpringLayout.EAST, mPanel);
mSpringLayout.putConstraint(SpringLayout.NORTH, mLabelIterations, 10, SpringLayout.SOUTH,
mInputCalculationInterval);
mSpringLayout.putConstraint(SpringLayout.NORTH, mInputCalculationIterations, 5, SpringLayout.SOUTH,
mInputCalculationInterval);
mSpringLayout.putConstraint(SpringLayout.WEST, mLabelIterations, 5, SpringLayout.WEST, mPanel);
mSpringLayout.putConstraint(SpringLayout.WEST, mInputCalculationIterations, 5, SpringLayout.EAST,
mLabelIterations);
mSpringLayout.putConstraint(SpringLayout.EAST, mInputCalculationIterations, -5, SpringLayout.EAST, mPanel);
mSpringLayout.putConstraint(SpringLayout.NORTH, mLabelHighlights, 10, SpringLayout.SOUTH,
mInputCalculationIterations);
mSpringLayout.putConstraint(SpringLayout.NORTH, mInputHighlightsTimeout, 5, SpringLayout.SOUTH,
mInputCalculationIterations);
mSpringLayout.putConstraint(SpringLayout.WEST, mLabelHighlights, 5, SpringLayout.WEST, mPanel);
mSpringLayout.putConstraint(SpringLayout.WEST, mInputHighlightsTimeout, 5, SpringLayout.EAST, mLabelIterations);
mSpringLayout.putConstraint(SpringLayout.EAST, mInputHighlightsTimeout, -5, SpringLayout.EAST, mPanel);
mSpringLayout.putConstraint(SpringLayout.NORTH, mLabelNodeTranslationDuration, 10, SpringLayout.SOUTH,
mInputHighlightsTimeout);
mSpringLayout.putConstraint(SpringLayout.NORTH, mInputNodeTranslationDuration, 5, SpringLayout.SOUTH,
mInputHighlightsTimeout);
mSpringLayout.putConstraint(SpringLayout.WEST, mLabelNodeTranslationDuration, 5, SpringLayout.WEST, mPanel);
mSpringLayout.putConstraint(SpringLayout.WEST, mInputNodeTranslationDuration, 5, SpringLayout.EAST,
mLabelIterations);
mSpringLayout.putConstraint(SpringLayout.EAST, mInputNodeTranslationDuration, -5, SpringLayout.EAST, mPanel);
mPanelButton = new JPanel();
mSpringLayout.putConstraint(SpringLayout.NORTH, mPanelButton, 5, SpringLayout.SOUTH,
mInputNodeTranslationDuration);
mSpringLayout.putConstraint(SpringLayout.WEST, mPanelButton, 5, SpringLayout.WEST, mPanel);
mSpringLayout.putConstraint(SpringLayout.EAST, mPanel, 5, SpringLayout.EAST, mPanelButton);
}
/**
* Adds the elements to the frame
*/
private void addElements() {
mPanel.add(mLabelNetwork);
mPanel.add(mInputNetworkInterval);
mPanel.add(mLabelCalculation);
mPanel.add(mInputCalculationInterval);
mPanel.add(mLabelIterations);
mPanel.add(mInputCalculationIterations);
mPanel.add(mLabelHighlights);
mPanel.add(mInputHighlightsTimeout);
mPanel.add(mLabelNodeTranslationDuration);
mPanel.add(mInputNodeTranslationDuration);
mPanel.add(mPanelButton);
mPanelButton.add(mButtonSave);
mPanelButton.add(mButtonCancel);
add(mPanel);
}
}