package crmdna.mail2;
import crmdna.common.Utils;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static crmdna.common.AssertUtils.ensure;
import static crmdna.common.AssertUtils.ensureNotNull;
public class MailMap {
public enum MergeVarID {
MAIL_ID,
FIRST_NAME,
LAST_NAME,
EMAIL,
MOBILE_PHONE,
HOME_PHONE,
OFFICE_PHONE,
VERIFICATION_CODE,
PASSWORD,
SUBSCRIPTION_TYPE,
AMOUNT,
VALIDITY,
PROGRAM_NAME,
REGISTRATION_ID,
DATES,
VENUE,
SESSIONS,
TRANSACTION_ID,
INVOICE_NUMBER,
}
private Map<String, Map<MergeVarID, String>> map = new HashMap<>();
private Map<MergeVarID, String> globalMap = new HashMap<>();
private Map<MergeVarID, Object> globalObjectMap = new HashMap<>();
public void add(String email) {
ensure(Utils.isValidEmailAddress(email), "Email is invalid");
map.put(email, new HashMap<MergeVarID, String>());
}
public void add(String email, String firstName, String lastName) {
add(email);
add(email, MergeVarID.FIRST_NAME, firstName);
add(email, MergeVarID.LAST_NAME, lastName);
}
public void add(String email, MergeVarID id, String value) {
Map<MergeVarID, String> _map = map.get(email);
if (_map == null) {
_map = new HashMap<>();
}
_map.put(id, value);
map.put(email, _map);
}
public void add(MergeVarID id, String value) {
globalMap.put(id, value);
}
public void add(MergeVarID id, Object value) {
globalObjectMap.put(id, value);
}
public Set<String> getEmails() {
return map.keySet();
}
public long getMailId(String email) {
return Long.parseLong(map.get(email).get(MergeVarID.MAIL_ID));
}
public String get(MergeVarID id, String email) {
ensure(map.containsKey(email), "Email [" + email + "] missing in MailMap");
return this.map.get(email).get(id);
}
public String get(MergeVarID id) {
return globalMap.get(id);
}
public Object getObject(MergeVarID id) {
return globalObjectMap.get(id);
}
public int size() {
return map.size();
}
public boolean isEmpty() {
return map.isEmpty();
}
public void delete(String email) {
ensureNotNull(email, "email is null");
map.remove(email);
}
public void validateMergeVars() {
Set<MergeVarID> prevSet = null;
for (Map.Entry<String, Map<MergeVarID, String>> entry : map.entrySet()) {
Map<MergeVarID, String> mergeVarMap = entry.getValue();
if (prevSet == null) {
prevSet = mergeVarMap.keySet();
} else {
ensure(prevSet.equals(mergeVarMap.keySet()),
"Number of mergeVars differ between entries");
}
}
}
public void populateMailIds() {
Long mailId = (new Date().getTime()) * 1000000;
for (Map.Entry<String, Map<MergeVarID, String>> entry : map.entrySet())
{
Map<MergeVarID, String> mergeVarMap = entry.getValue();
mergeVarMap.put(MergeVarID.MAIL_ID, (mailId++).toString());
}
}
}