/**
* Copyright 2014 Jordan Zimmerman
*
* 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.
*/
package io.soabase.zookeeper.discovery;
import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import io.soabase.core.features.discovery.DiscoveryInstance;
import io.soabase.core.features.discovery.ForcedState;
import io.soabase.core.features.discovery.HealthyState;
import org.codehaus.jackson.annotate.JsonIgnore;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
public class Payload
{
private String adminHost;
private int adminPort;
private Map<String, String> metaData;
private ForcedState forcedState;
private HealthyState healthyState;
public Payload()
{
this(null, 0, Maps.<String, String>newHashMap(), ForcedState.CLEARED, HealthyState.HEALTHY);
}
public Payload(String adminHost, int adminPort, Map<String, String> metaData, ForcedState forcedState, HealthyState healthyState)
{
this.adminHost = Preconditions.checkNotNull(adminHost, "adminHost cannot be null");
this.forcedState = Preconditions.checkNotNull(forcedState, "forcedState cannot be null");
this.healthyState = Preconditions.checkNotNull(healthyState, "healthyState cannot be null");
metaData = Preconditions.checkNotNull(metaData, "metaData cannot be null");
this.adminPort = adminPort;
this.metaData = ImmutableMap.copyOf(metaData);
}
public String getAdminHost()
{
return adminHost;
}
public void setAdminHost(String adminHost)
{
this.adminHost = adminHost;
}
public int getAdminPort()
{
return adminPort;
}
public void setAdminPort(int adminPort)
{
this.adminPort = adminPort;
}
public static void addDeploymentGroups(Map<String, String> metaData, Collection<String> deploymentGroups)
{
if ( deploymentGroups.size() > 0 )
{
metaData.put(DiscoveryInstance.META_DATA_KEY_DEPLOYMENT_GROUP, Joiner.on(',').join(deploymentGroups));
}
}
@JsonIgnore
public Collection<String> getDeploymentGroups()
{
if ( metaData != null )
{
String value = metaData.get(DiscoveryInstance.META_DATA_KEY_DEPLOYMENT_GROUP);
if ( value != null )
{
return Splitter.on(',').trimResults().omitEmptyStrings().splitToList(value);
}
}
return Collections.emptySet();
}
public Map<String, String> getMetaData()
{
return metaData;
}
public void setMetaData(Map<String, String> metaData)
{
metaData = Preconditions.checkNotNull(metaData, "metaData cannot be null");
this.metaData = ImmutableMap.copyOf(metaData);
}
public ForcedState getForcedState()
{
return forcedState;
}
public HealthyState getHealthyState()
{
return healthyState;
}
public void setForcedState(ForcedState forcedState)
{
this.forcedState = forcedState;
}
public void setHealthyState(HealthyState healthyState)
{
this.healthyState = healthyState;
}
@Override
public boolean equals(Object o)
{
if ( this == o )
{
return true;
}
if ( o == null || getClass() != o.getClass() )
{
return false;
}
Payload payload = (Payload)o;
if ( adminPort != payload.adminPort )
{
return false;
}
if ( !adminHost.equals(payload.adminHost) )
{
return false;
}
if ( !metaData.equals(payload.metaData) )
{
return false;
}
//noinspection SimplifiableIfStatement
if ( forcedState != payload.forcedState )
{
return false;
}
return healthyState == payload.healthyState;
}
@Override
public int hashCode()
{
int result = adminHost.hashCode();
result = 31 * result + adminPort;
result = 31 * result + metaData.hashCode();
result = 31 * result + forcedState.hashCode();
result = 31 * result + healthyState.hashCode();
return result;
}
@Override
public String toString()
{
return "Payload{" +
"adminHost='" + adminHost + '\'' +
", adminPort=" + adminPort +
", metaData=" + metaData +
", forcedState=" + forcedState +
", healthyState=" + healthyState +
'}';
}
}