package com.constellio.model.entities.structures;
import java.util.StringTokenizer;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import com.constellio.model.entities.schemas.ModifiableStructure;
import com.constellio.model.entities.schemas.StructureFactory;
public class EmailAddressFactory implements StructureFactory {
private static final String NULL = "~null~";
private static final String DELIMITER = ":";
private static final String START_EMAIL = "<";
private static final String END_EMAIL = ">";
@Override
public ModifiableStructure build(String string) {
StringTokenizer stringTokenizer = new StringTokenizer(string, DELIMITER);
EmailAddress emailAddress = new EmailAddress();
emailAddress.name = readString(stringTokenizer);
emailAddress.email = readString(stringTokenizer);
emailAddress.dirty = false;
return emailAddress;
}
@Override
public String toString(ModifiableStructure structure) {
EmailAddress emailAddress = (EmailAddress) structure;
StringBuilder stringBuilder = new StringBuilder();
writeString(stringBuilder, emailAddress.getName() == null ?
NULL :
emailAddress.getName());
writeString(stringBuilder, emailAddress.getEmail() == null ?
NULL :
START_EMAIL + emailAddress.getEmail() + END_EMAIL);
return stringBuilder.toString();
}
public String toAddress(ModifiableStructure structure) {
return toString(structure).replace(DELIMITER, " ");
}
private String readString(StringTokenizer stringTokenizer) {
String value = stringTokenizer.nextToken();
if (NULL.equals(value)) {
return null;
} else {
value = value.replace("~~~", DELIMITER);
value = value.replace(START_EMAIL, "");
value = value.replace(END_EMAIL, "");
return value;
}
}
private void writeString(StringBuilder stringBuilder, String value) {
if (stringBuilder.length() != 0) {
stringBuilder.append(DELIMITER);
}
if (value == null) {
stringBuilder.append(NULL);
} else {
value = value.replace(DELIMITER, "~~~");
stringBuilder.append(value);
}
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
}