package org.celllife.idart.integration.mobilisr; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import org.celllife.idart.commonobjects.PropertiesManager; import org.celllife.idart.commonobjects.SmsProperties; import org.celllife.idart.commonobjects.iDartProperties; import org.celllife.idart.database.hibernate.Campaign; import org.celllife.mobilisr.api.rest.CampaignDto; import org.celllife.mobilisr.api.rest.ContactDto; import org.celllife.mobilisr.api.rest.PagedListDto; import org.celllife.mobilisr.api.validation.MsisdnCountryRule; import org.celllife.mobilisr.api.validation.MsisdnValidator.ValidationError; import org.celllife.mobilisr.api.validation.ValidatorFactory; import org.celllife.mobilisr.api.validation.ValidatorFactoryImpl; import org.celllife.mobilisr.client.CampaignService; import org.celllife.mobilisr.client.ContactService; import org.celllife.mobilisr.client.MobilisrClient; import org.celllife.mobilisr.client.exception.RestCommandException; import org.celllife.mobilisr.client.impl.MobilisrClientImpl; import org.celllife.mobilisr.constants.CampaignType; public class MobilisrManager { private static MobilisrClient client; private static ValidatorFactory vfactory; public static List<Campaign> getCampaigns() throws RestCommandException{ List<Campaign> campaigns = new ArrayList<Campaign>(); PagedListDto<CampaignDto> relative = getCampaignService().getCampaigns(CampaignType.DAILY); PagedListDto<CampaignDto> generic = getCampaignService().getCampaigns(CampaignType.FLEXI); if(relative != null && relative.getElements() != null){ for(CampaignDto dto : relative.getElements()){ Campaign campaign = getCampaignFromDto(dto); campaigns.add(campaign); } } if(generic != null && generic.getElements() != null){ for(CampaignDto dto : generic.getElements()){ Campaign campaign = getCampaignFromDto(dto); campaigns.add(campaign); } } return campaigns; } /** * @param dto * @return */ private static Campaign getCampaignFromDto(CampaignDto dto) { Campaign campaign = new Campaign(); campaign.setMobilisrId(dto.getId()); campaign.setName(dto.getName()); campaign.setDescription(dto.getDescription()); if(dto.getDuration() != null) campaign.setDuration(dto.getDuration()); campaign.setStartDate(dto.getStartDate()); if(dto.getTimesPerDay() != null) campaign.setTimesPerDay(dto.getTimesPerDay()); campaign.setStatus(dto.getStatus()); campaign.setType(dto.getType()); return campaign; } /** * Add the Patient to the Campaign * @param firstName * @param lastName * @param cellphone * @param campaignId * @param msgTime * @throws RestCommandException */ public static void addPatientToCampaign(String firstName, String lastName, String cellphone, Long campaignId, Date msgTime) throws RestCommandException{ ContactDto contactDto = new ContactDto(); contactDto.setFirstName(firstName); contactDto.setLastName(lastName); contactDto.setMsisdn(cellphone); if (msgTime != null){ contactDto.setContactMessageTimes(Arrays.asList(msgTime)); } try { getCampaignService().addContactToCampaign(campaignId, contactDto); } catch (Exception e) { throw new RestCommandException(e.getMessage(), e); } } /** * Remove's a patient from a campaign * @param campaignId * @param cellphone * @throws RestCommandException */ public static void removePatientFromCampaign(Long campaignId, String cellphone) throws RestCommandException{ getCampaignService().removeContactFromCampaign(campaignId, cellphone); } /** * Creates a new justSms Campaign * @param campaign */ public static void createNewCampaign(CampaignDto campaign) throws RestCommandException { getCampaignService().createNewCampaign(campaign); } public static void updateMobilisrCellNo(String oldCellNo, String firstName, String lastName, String newCellNo) throws RestCommandException{ ContactDto contactDto = new ContactDto(); contactDto.setFirstName(firstName); contactDto.setLastName(lastName); contactDto.setMsisdn(newCellNo); getContactService().updateContactDetails(oldCellNo, contactDto); } private static CampaignService getCampaignService(){ initClient(); return client.getCampaignService(); } private static ContactService getContactService(){ initClient(); return client.getContactService(); } private static void initClient() { if (client == null){ client = new MobilisrClientImpl(PropertiesManager.sms().mobilisrurl(), PropertiesManager.sms().mobilisrusername(), PropertiesManager.sms().mobilisrpassword(), getValidator()); } } private static ValidatorFactory getValidator(){ if (vfactory == null){ ValidatorFactoryImpl vf = new ValidatorFactoryImpl(); String prefix = PropertiesManager.sms().msisdnPrefix(); String regex = PropertiesManager.smsRaw().getProperty(SmsProperties.MSISDN_REGEX); vf.setCountryRules(Arrays.asList(new MsisdnCountryRule(iDartProperties.country, prefix, regex))); vfactory = vf; } return vfactory; } public static ValidationError validateMsisdn(String msisdn){ ValidationError error = getValidator().validateMsisdn(msisdn); return error; } }