// Copyright © 2015 HSL <https://www.hsl.fi>
// This program is dual-licensed under the EUPL v1.2 and AGPLv3 licenses.
package fi.hsl.parkandride.core.domain;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableSet;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
import java.util.AbstractMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
public class MultilingualString {
@NotBlank
@Length(min = 0, max = 255)
public String fi;
@NotBlank
@Length(min = 0, max = 255)
public String sv;
@NotBlank
@Length(min = 0, max = 255)
public String en;
public MultilingualString() {
}
public MultilingualString(String all) {
this(all, all, all);
}
public MultilingualString(String fi, String sv, String en) {
this.fi = fi;
this.sv = sv;
this.en = en;
}
public String getFi() {
return fi;
}
public String getSv() {
return sv;
}
public String getEn() {
return en;
}
@Override
public final int hashCode() {
int hashCode = fi == null ? 1 : fi.hashCode();
hashCode = 31 * hashCode + (sv == null ? 0 : sv.hashCode());
return 31 * hashCode + (en == null ? 0 : en.hashCode());
}
@Override
public final boolean equals(Object obj) {
if (obj == this) {
return true;
} else if (obj instanceof MultilingualString) {
MultilingualString other = (MultilingualString) obj;
return Objects.equals(this.fi, other.fi) && Objects.equals(this.sv, other.sv) && Objects.equals(this.en, other.en);
} else {
return false;
}
}
@Override
public String toString() {
return MoreObjects.toStringHelper(MultilingualString.class)
.add("fi", fi)
.add("sv", sv)
.add("en", en)
.toString();
}
public Map<String, String> asMap() {
return new AbstractMap<String, String>() {
@Override
public Set<Entry<String, String>> entrySet() {
return ImmutableSet.of(
new SimpleEntry<>("fi", fi),
new SimpleEntry<>("sv", sv),
new SimpleEntry<>("en", en)
);
}
@Override
public String put(String key, String value) {
String oldValue;
switch (key) {
case "fi":
oldValue = fi;
fi = value;
break;
case "sv":
oldValue = sv;
sv = value;
break;
case "en":
oldValue = en;
en = value;
break;
default:
throw new IllegalArgumentException("Unsupported lang: " + key);
}
return oldValue;
}
};
}
}