/*
* Copyright 2014-2017 the original author or authors.
*
* 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.pivotal.strepsirrhini.chaoslemur;
import org.springframework.util.Assert;
/**
* Represents a running instance
*/
public final class Member implements Comparable<Member> {
private final String deployment;
private final String id;
private final String job;
private final String name;
/**
* Creates an instance
*
* @param id the ID of the {@link Member}
* @param deployment the deployment the {@link Member} belongs to
* @param job the job the {@link Member} belongs to
* @param name the name of the {@link Member}
*/
public Member(String id, String deployment, String job, String name) {
Assert.hasText(id, "id must have text");
Assert.hasText(deployment, "deployment must have text");
Assert.hasText(job, "job must have text");
Assert.hasText(name, "name must have text");
this.id = id;
this.deployment = deployment;
this.job = job;
this.name = name;
}
@Override
public int compareTo(Member member) {
return this.name.compareTo(member.getName());
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Member member = (Member) o;
return name == null ? member.name == null : name.equals(member.name);
}
/**
* Returns the deployment the {@link Member} belongs to
*
* @return the deployment the {@link Member} belongs to
*/
public String getDeployment() {
return this.deployment;
}
/**
* Returns the ID of the {@link Member}
*
* @return the ID of the {@link Member}
*/
public String getId() {
return this.id;
}
/**
* Returns the job the {@link Member} belongs to
*
* @return the job the {@link Member} belongs to
*/
public String getJob() {
return this.job;
}
/**
* Returns the name of the {@link Member}
*
* @return the name of the {@link Member}
*/
public String getName() {
return this.name;
}
@Override
public int hashCode() {
return name != null ? name.hashCode() : 0;
}
@Override
public String toString() {
return String.format("[id: %s, deployment: %s, job: %s, name: %s]", this.id, this.deployment, this.job, this.name);
}
}