package matteroverdrive.data.transport;
import matteroverdrive.api.transport.IPipe;
import matteroverdrive.api.transport.IPipeNetwork;
import java.util.Collection;
/**
* Created by Simeon on 12/28/2015.
*/
public abstract class AbstractPipeNetwork<T extends IPipe> implements IPipeNetwork<T>
{
public void invalidateNetwork()
{
for (IPipe pipe : getNetworkPipes())
{
pipe.setNetwork(null);
}
getNetworkPipes().clear();
}
public void merge(IPipeNetwork<T> network)
{
for (T pipe : network.getNetworkPipes())
{
pipe.setNetwork(this);
getNetworkPipes().add(pipe);
}
}
@Override
public void addPipe(T pipe)
{
getNetworkPipes().add(pipe);
if (pipe.getNetwork() != null && pipe.getNetwork() != this)
{
pipe.getNetwork().removePipe(pipe);
}
pipe.setNetwork(this);
}
@Override
public void removePipe(T pipe)
{
getNetworkPipes().remove(pipe);
}
@Override
public void destroyPipe(T pipe)
{
removePipe(pipe);
if (getNetworkPipes().size() == 0)
{
invalidateNetwork();
}
Collection<T> connections = pipe.getConnections();
if (connections.size() > 1)
{
for(T connection : connections)
{
if (connection.getNetwork() != null && connection.getNetwork() == this)
connection.getNetwork().invalidateNetwork();
}
}
}
public abstract void networkUpdate(T pipe);
}