/***********************************************************************************
*
* Copyright (c) 2015 Kamil Baczkowicz
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
*
* Kamil Baczkowicz - initial API and implementation and/or initial documentation
*
*/
package pl.baczkowicz.mqttspy.ui.controllers.edit;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.CheckBox;
import javafx.scene.layout.AnchorPane;
import pl.baczkowicz.mqttspy.common.generated.SimpleMqttMessage;
import pl.baczkowicz.mqttspy.common.generated.PublicationDetails;
import pl.baczkowicz.mqttspy.configuration.ConfiguredConnectionDetails;
import pl.baczkowicz.mqttspy.configuration.generated.UserInterfaceMqttConnectionDetails;
import pl.baczkowicz.mqttspy.messages.BaseMqttMessage;
import pl.baczkowicz.mqttspy.ui.EditConnectionController;
import pl.baczkowicz.mqttspy.ui.NewPublicationController;
/**
* Controller for editing a single connection - last will tab.
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public class EditConnectionLastWillController extends AnchorPane implements Initializable, EditConnectionSubController
{
// LWT
@FXML
private CheckBox lastWillAndTestament;
/**
* The name of this field needs to be set to the name of the pane +
* Controller (i.e. <fx:id>Controller).
*/
@FXML
private NewPublicationController lastWillAndTestamentMessageController;
// Other fields
private final ChangeListener basicOnChangeListener = new ChangeListener()
{
@Override
public void changed(ObservableValue observable, Object oldValue, Object newValue)
{
onChange();
}
};
/** The parent controller. */
private EditConnectionController parent;
// ===============================
// === Initialisation ============
// ===============================
public void initialize(URL location, ResourceBundle resources)
{
// LWT
lastWillAndTestament.selectedProperty().addListener(basicOnChangeListener);
lastWillAndTestamentMessageController.getPublicationTopicText().valueProperty().addListener(basicOnChangeListener);
lastWillAndTestamentMessageController.getPublicationData().textProperty().addListener(basicOnChangeListener);
lastWillAndTestamentMessageController.getPublicationQosChoice().getSelectionModel().selectedIndexProperty().addListener(basicOnChangeListener);
lastWillAndTestamentMessageController.getRetainedBox().selectedProperty().addListener(basicOnChangeListener);
lastWillAndTestamentMessageController.hidePublishButton();
}
public void init()
{
// Nothing to do
}
// ===============================
// === Logic =====================
// ===============================
public void onChange()
{
parent.onChange();
}
@Override
public UserInterfaceMqttConnectionDetails readValues(final UserInterfaceMqttConnectionDetails connection)
{
if (lastWillAndTestament.isSelected())
{
final BaseMqttMessage message = lastWillAndTestamentMessageController.readMessage(false, false);
if (message != null)
{
connection.setLastWillAndTestament(new SimpleMqttMessage(message.getPayload(), message.getTopic(), message.getQoS(), message.isRetained()));
}
}
return connection;
}
@Override
public void displayConnectionDetails(final ConfiguredConnectionDetails connection)
{
lastWillAndTestamentMessageController.clearTopics();
for (final PublicationDetails pub : connection.getPublication())
{
lastWillAndTestamentMessageController.recordPublicationTopic(pub.getTopic());
}
// LWT
lastWillAndTestament.setSelected(connection.getLastWillAndTestament() != null);
lastWillAndTestamentMessageController.displayMessage(connection.getLastWillAndTestament());
}
// ===============================
// === Setters and getters =======
// ===============================
@Override
public void setParent(final EditConnectionController controller)
{
this.parent = controller;
}
}