package com.yoursway.common;
import java.util.Arrays;
/**
* Immutable.
*
* @author Andrey Tarantsov
*/
public class SegmentedName {
public static final SegmentedName EMPTY_SEGMENTED_NAME = new SegmentedName(new String[0]);
private final String[] segments;
public SegmentedName(String[] segments) {
this.segments = segments;
}
public String[] getSegments() {
return segments;
}
public String getTrailingSegment() {
if (segments.length == 0)
throw new IndexOutOfBoundsException("Segmented name is empty");
return segments[segments.length - 1];
}
public SegmentedName removeTrailingSegment() {
if (segments.length == 0)
throw new IndexOutOfBoundsException("Segmented name is empty");
if (segments.length == 1)
return EMPTY_SEGMENTED_NAME;
String[] result = new String[segments.length - 1];
System.arraycopy(segments, 0, result, 0, result.length);
return new SegmentedName(result);
};
public SegmentedName replaceTrailingSegment(String newTrailingSegment) {
if (segments.length == 0)
throw new IndexOutOfBoundsException("Segmented name is empty");
String[] result = new String[segments.length];
System.arraycopy(segments, 0, result, 0, result.length - 1);
result[result.length - 1] = newTrailingSegment;
return new SegmentedName(result);
}
public int getSegmentCount() {
return segments.length;
}
public boolean equalsSingleSegment(String singleSegment) {
return segments.length == 1 && segments[0].equals(singleSegment);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode(segments);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final SegmentedName other = (SegmentedName) obj;
if (!Arrays.equals(segments, other.segments))
return false;
return true;
}
}