package crmdna.participant;
import com.googlecode.objectify.annotation.Cache;
import com.googlecode.objectify.annotation.Entity;
import com.googlecode.objectify.annotation.Id;
import com.googlecode.objectify.annotation.Index;
import crmdna.client.Client;
import crmdna.common.contact.Contact.Gender;
import crmdna.common.contact.ContactProp;
import crmdna.member.MemberEntity;
import crmdna.program.Program;
import crmdna.sequence.Sequence;
import crmdna.sequence.Sequence.SequenceType;
import java.util.ArrayList;
import java.util.List;
import static crmdna.common.AssertUtils.ensureEqual;
import static crmdna.common.AssertUtils.ensureNotNull;
@Entity
@Cache
public class ParticipantEntity {
@Id
long participantId;
@Index
String email;
String firstName;
String lastName;
Gender gender;
String homePhone;
String officePhone;
@Index
String mobilePhone;
String homeAddress;
String homeCity;
String homeState;
String homeCountry;
String homePincode;
String occupation;
String company;
String officeAddress;
String officePincode;
@Index
long programId;
@Index
long memberId;
public ParticipantProp toProp() {
ParticipantProp prop = new ParticipantProp();
prop.participantId = participantId;
prop.contactDetail.email = email;
prop.contactDetail.firstName = firstName;
prop.contactDetail.lastName = lastName;
prop.contactDetail.gender = gender;
prop.contactDetail.homePhone = homePhone;
prop.contactDetail.officePhone = officePhone;
prop.contactDetail.mobilePhone = mobilePhone;
prop.contactDetail.homeAddress.address = homeAddress;
prop.contactDetail.homeAddress.city = homeCity;
prop.contactDetail.homeAddress.state = homeState;
prop.contactDetail.homeAddress.country = homeCountry;
prop.contactDetail.officeAddress.address = officeAddress;
prop.contactDetail.occupation = occupation;
prop.contactDetail.company = company;
// copy city, state and country from home
prop.contactDetail.officeAddress.city = homeCity;
prop.contactDetail.officeAddress.state = homeState;
prop.contactDetail.officeAddress.country = homeCountry;
prop.contactDetail.officeAddress.pincode = officePincode;
prop.programId = programId;
prop.memberId = memberId;
prop.programId = programId;
return prop;
}
static class ParticipantFactory {
static List<ParticipantEntity> create(String client,
List<ContactProp> contacts, List<MemberEntity> memberEntities, long programId) {
Client.ensureValid(client);
Program.safeGet(client, programId);
ensureNotNull(contacts);
ensureEqual(contacts.size(), memberEntities.size(), "No of contacts ["
+ contacts.size() + "] is different from no of members ["
+ memberEntities.size() + "]");
// none of the contact or member entity can be null
for (int i = 0; i < contacts.size(); i++) {
ensureNotNull(contacts.get(i));
ensureNotNull(memberEntities.get(i));
}
List<ParticipantEntity> entities = new ArrayList<>(contacts.size());
List<Long> ids = Sequence.getNext(client, SequenceType.PARTICIPANT,
contacts.size());
for (int i = 0; i < contacts.size(); i++) {
ContactProp c = contacts.get(i);
ParticipantEntity pe = new ParticipantEntity();
pe.participantId = ids.get(i);
pe.email = c.email;
pe.firstName = c.firstName;
pe.lastName = c.lastName;
pe.gender = c.gender;
// pe.groupId = c.centerId;
pe.homeAddress = c.homeAddress.address;
pe.homePhone = c.homePhone;
pe.mobilePhone = c.mobilePhone;
pe.lastName = c.lastName;
pe.occupation = c.occupation;
pe.company = c.company;
pe.officeAddress = c.officeAddress.address;
pe.officePhone = c.officePhone;
pe.programId = programId;
pe.memberId = memberEntities.get(i).getId();
entities.add(pe);
}
return entities;
}
}
}