/*
* Copyright (c) 2014 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.computesystemcontroller.impl.adapter;
import java.io.Serializable;
import java.net.URI;
import java.util.Collection;
import com.emc.storageos.db.client.model.Host;
import com.emc.storageos.db.client.model.Initiator;
import com.emc.storageos.db.client.util.CommonTransformerFunctions;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
/**
* Container for storing the state of host changes during discovery.
* During host discovery, new and old initiators can be set on the state.
*/
public class HostStateChange implements Serializable {
protected Host host;
protected Collection<URI> oldInitiators;
protected Collection<URI> newInitiators;
protected URI oldCluster;
protected URI newCluster;
protected URI oldDatacenterURI;
protected URI newDatacenterURI;
/**
* Create a new host state
*
* @param target host
* @param oldClusterURI old cluster id
* @param oldInitiators list of removed initiators
* @param addedInitiators list of new initiators
*/
public HostStateChange(Host target, URI oldClusterURI, URI newClusterURI, Collection<Initiator> oldInitiators,
Collection<Initiator> addedInitiators, URI oldDatacenterURI, URI newDatacenterURI) {
this.host = target;
this.oldInitiators = Sets.newHashSet();
this.newInitiators = Sets.newHashSet();
this.oldCluster = oldClusterURI;
this.newCluster = newClusterURI;
Collection<URI> oldInitiatorIds = Lists.newArrayList(Collections2.transform(oldInitiators,
CommonTransformerFunctions.fctnDataObjectToID()));
Collection<URI> addedInitiatorIds = Lists.newArrayList(Collections2.transform(addedInitiators,
CommonTransformerFunctions.fctnDataObjectToID()));
this.oldInitiators.addAll(oldInitiatorIds);
this.newInitiators.addAll(addedInitiatorIds);
this.oldDatacenterURI = oldDatacenterURI;
this.newDatacenterURI = newDatacenterURI;
}
/**
* Create a new host state
*
* @param target host
* @param oldClusterURI old cluster id
*/
public HostStateChange(Host target, URI oldClusterURI) {
this.host = target;
this.oldInitiators = Sets.newHashSet();
this.newInitiators = Sets.newHashSet();
this.oldCluster = oldClusterURI;
}
/**
* Return host
*
* @return host
*/
public Host getHost() {
return host;
}
/**
* Returns list of old initiators
*
* @return old initiators
*/
public Collection<URI> getOldInitiators() {
return this.oldInitiators;
}
/**
* Returns list of new initiators
*
* @return new initiators
*/
public Collection<URI> getNewInitiators() {
return this.newInitiators;
}
/**
* Set list of old initiators
*
* @param oldInitiators
*/
public void setOldInitiators(Collection<URI> oldInitiators) {
this.oldInitiators = oldInitiators;
}
/**
* Set list of new initiators
*
* @param newInitiators
*/
public void setNewInitiators(Collection<URI> newInitiators) {
this.newInitiators = newInitiators;
}
/**
* Set new cluster
*
* @param new cluster
*/
public void setNewCluster(URI newCluster) {
this.newCluster = newCluster;
}
/**
* Set old cluster
*
* @param old cluster
*/
public void setOldCluster(URI oldCluster) {
this.oldCluster = oldCluster;
}
/**
* Return old cluster id
*
* @return old cluster id
*/
public URI getOldCluster() {
return this.oldCluster;
}
/**
* Return new cluster id
*
* @return new cluster id
*/
public URI getNewCluster() {
return this.newCluster;
}
/**
* Return new datacenter id
*
* @return new datacenter id
*/
public URI getNewDatacenter() {
return this.newDatacenterURI;
}
/**
* Return old datacenter id
*
* @return old datacenter id
*/
public URI getOldDatacenter() {
return this.oldDatacenterURI;
}
@Override
public String toString() {
return "HostStateChange: [Host: " + this.host.getLabel() + " with cluster: "
+ (this.newCluster == null ? "null" : this.newCluster) + ", OldInitiators: " + this.oldInitiators
+ ", NewInitators: " + this.newInitiators + ", OldCluster: " + this.oldCluster + ", Datacenter: "
+ this.newDatacenterURI + ", Old Datacenter: " + this.oldDatacenterURI + "]";
}
}