/***********************************************************************************
*
* Copyright (c) 2014 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.configuration;
import pl.baczkowicz.mqttspy.configuration.generated.UserInterfaceMqttConnectionDetails;
import pl.baczkowicz.spy.common.generated.ConnectionGroup;
import pl.baczkowicz.spy.common.generated.ConnectionGroupReference;
import pl.baczkowicz.spy.ui.configuration.ConfiguredConnectionGroupDetails;
import pl.baczkowicz.spy.ui.properties.ModifiableItem;
public class ConfiguredConnectionDetails extends UserInterfaceMqttConnectionDetails implements ModifiableItem
{
private static final long serialVersionUID = -111271741915161354L;
private boolean modified;
private boolean begingCreated;
private boolean deleted;
private boolean newConnection;
private boolean valid;
private ConfiguredConnectionDetails lastSavedValues;
private ConnectionGroupReference group;
private boolean groupingModified;
public ConfiguredConnectionDetails()
{
// Default constructor
}
/**
* Initialising value constructor
*/
public ConfiguredConnectionDetails(
final ConnectionGroupReference group,
final UserInterfaceMqttConnectionDetails connection)
{
this.group = group;
connection.copyTo(this);
}
public ConfiguredConnectionDetails(final boolean created, final boolean newConnection,
final UserInterfaceMqttConnectionDetails connection)
{
//this.id = id;
this.modified = newConnection;
this.begingCreated = created;
this.newConnection = newConnection;
final ConfiguredConnectionDetails connectionDetails = new ConfiguredConnectionDetails(null, connection);
setConnectionDetails(connectionDetails);
setLastSavedValues(connectionDetails);
}
public void setConnectionDetails(final ConfiguredConnectionDetails connectionDetails)
{
// Take a copy and null it, so that copyTo can work...
final ConnectionGroup group = connectionDetails.getGroup() != null ? (ConnectionGroup) connectionDetails.getGroup().getReference() : null;
connectionDetails.setGroup(null);
if (connectionDetails != null)
{
connectionDetails.copyTo(this);
}
// Restore the group value
connectionDetails.setGroup(new ConnectionGroupReference(group));
setGroup(new ConnectionGroupReference(group));
}
public boolean isModified()
{
return modified;
}
public void setModified(boolean modified)
{
this.modified = modified;
}
public boolean isBeingCreated()
{
return begingCreated;
}
public void setBeingCreated(boolean created)
{
this.begingCreated = created;
}
public UserInterfaceMqttConnectionDetails getSavedValues()
{
return lastSavedValues;
}
private void setLastSavedValues(final ConfiguredConnectionDetails savedValues)
{
this.lastSavedValues = savedValues;
}
public boolean isValid()
{
return valid;
}
public void setValid(boolean valid)
{
this.valid = valid;
}
public void undo()
{
// Make sure we won't revert any grouping changes here
final ConfiguredConnectionGroupDetails group = (ConfiguredConnectionGroupDetails) getGroup().getReference();
setConnectionDetails(lastSavedValues);
setGroup(new ConnectionGroupReference(group));
modified = newConnection;
}
/**
* This method undoes all changes, including those about grouping.
*/
public void undoAll()
{
setConnectionDetails(lastSavedValues);
modified = newConnection;
groupingModified = false;
}
public void apply()
{
final ConfiguredConnectionDetails valuesToSave = new ConfiguredConnectionDetails(false, false, this);
setLastSavedValues(valuesToSave);
begingCreated = false;
newConnection = false;
modified = false;
groupingModified = false;
}
public boolean isDeleted()
{
return deleted;
}
public void setDeleted(boolean deleted)
{
this.deleted = deleted;
}
public boolean isNew()
{
return newConnection;
}
public void removeFromGroup()
{
ConfiguredConnectionGroupDetails.removeFromGroup(this, (ConnectionGroup) getGroup().getReference());
}
public void setGroupingModified(boolean modified)
{
this.groupingModified = modified;
}
public boolean isGroupingModified()
{
return groupingModified;
}
/**
* @return the group
*/
public ConnectionGroupReference getGroup()
{
return group;
}
/**
* @param group the group to set
*/
public void setGroup(ConnectionGroupReference group)
{
this.group = group;
}
}