/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.smartitengineering.user.service.impl.hbase.dao; import com.smartitengineering.dao.impl.hbase.spi.ExecutorService; import com.smartitengineering.dao.impl.hbase.spi.impl.AbstractObjectRowConverter; import com.smartitengineering.user.domain.Person; import java.util.Arrays; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.util.Bytes; /** * * @author imyousuf */ public class PersonObjectConverter extends AbstractObjectRowConverter<Person, Long> { private static final byte[] FAMILY_SELF = Bytes.toBytes("self"); private static final byte[] CELL_PRIMARY_EMAIL = Bytes.toBytes("primaryEmail"); private static final byte[] CELL_SECONDARY_EMAIL = Bytes.toBytes("secondaryEmail"); private static final byte[] CELL_PHONE_NUMBER = Bytes.toBytes("phoneNumber"); private static final byte[] CELL_CELL_PHONE_NUMBER = Bytes.toBytes("cellPhoneNumber"); private static final byte[] CELL_FAX_NUMBER = Bytes.toBytes("faxNumber"); private static final byte[] CELL_DOB = Bytes.toBytes("dob"); private static final byte[] CELL_ADDRESS_STREET = Bytes.toBytes("address.street"); private static final byte[] CELL_ADDRESS_CITY = Bytes.toBytes("address.city"); private static final byte[] CELL_ADDRESS_STATE = Bytes.toBytes("address.state"); private static final byte[] CELL_ADDRESS_ZIP = Bytes.toBytes("address.zip"); private static final byte[] CELL_ADDRESS_COUNTRY = Bytes.toBytes("address.country"); private static final byte[] CELL_ADDRESS_GEO_LOCATION_LATITUDE = Bytes.toBytes("address.geoLocation.latitude"); private static final byte[] CELL_ADDRESS_GEO_LOCATION_LONGITUDE = Bytes.toBytes("address.geoLocation.longitude"); private static final List<byte[]> ADDRESS_CELL_LIST = Arrays.asList(CELL_ADDRESS_STREET, CELL_ADDRESS_CITY, CELL_ADDRESS_STATE, CELL_ADDRESS_ZIP, CELL_ADDRESS_COUNTRY, CELL_ADDRESS_GEO_LOCATION_LATITUDE, CELL_ADDRESS_GEO_LOCATION_LONGITUDE); private static final byte[] CELL_SELF_IDENTITY_NATIONAL_ID = Bytes.toBytes("SELF.natId"); private static final byte[] CELL_SELF_IDENTITY_FIRST_NAME = Bytes.toBytes("SELF.fname"); private static final byte[] CELL_SELF_IDENTITY_LAST_NAME = Bytes.toBytes("SELF.lname"); private static final byte[] CELL_SELF_IDENTITY_MIDDLE_INITIAL = Bytes.toBytes("SELF.mi"); private static final List<byte[]> SELF_CELL_LIST = Arrays.asList(CELL_SELF_IDENTITY_NATIONAL_ID, CELL_SELF_IDENTITY_FIRST_NAME, CELL_SELF_IDENTITY_LAST_NAME, CELL_SELF_IDENTITY_MIDDLE_INITIAL); private static final byte[] CELL_FATHER_IDENTITY_NATIONAL_ID = Bytes.toBytes("FATHER.natId"); private static final byte[] CELL_FATHER_IDENTITY_FIRST_NAME = Bytes.toBytes("FATHER.fname"); private static final byte[] CELL_FATHER_IDENTITY_LAST_NAME = Bytes.toBytes("FATHER.lname"); private static final byte[] CELL_FATHER_IDENTITY_MIDDLE_INITIAL = Bytes.toBytes("FATHER.mi"); private static final List<byte[]> FATHER_CELL_LIST = Arrays.asList(CELL_FATHER_IDENTITY_NATIONAL_ID, CELL_FATHER_IDENTITY_FIRST_NAME, CELL_FATHER_IDENTITY_LAST_NAME, CELL_FATHER_IDENTITY_MIDDLE_INITIAL); private static final byte[] CELL_MOTHER_IDENTITY_NATIONAL_ID = Bytes.toBytes("MOTHER.natId"); private static final byte[] CELL_MOTHER_IDENTITY_FIRST_NAME = Bytes.toBytes("MOTHER.fname"); private static final byte[] CELL_MOTHER_IDENTITY_LAST_NAME = Bytes.toBytes("MOTHER.lname"); private static final byte[] CELL_MOTHER_IDENTITY_MIDDLE_INITIAL = Bytes.toBytes("MOTHER.mi"); private static final List<byte[]> MOTHER_CELL_LIST = Arrays.asList(CELL_MOTHER_IDENTITY_NATIONAL_ID, CELL_MOTHER_IDENTITY_FIRST_NAME, CELL_MOTHER_IDENTITY_LAST_NAME, CELL_MOTHER_IDENTITY_MIDDLE_INITIAL); private static final byte[] CELL_SPOUSE_IDENTITY_NATIONAL_ID = Bytes.toBytes("SPOUSE.natId"); private static final byte[] CELL_SPOUSE_IDENTITY_FIRST_NAME = Bytes.toBytes("SPOUSE.fname"); private static final byte[] CELL_SPOUSE_IDENTITY_LAST_NAME = Bytes.toBytes("SPOUSE.lname"); private static final byte[] CELL_SPOUSE_IDENTITY_MIDDLE_INITIAL = Bytes.toBytes("SPOUSE.mi"); private static final List<byte[]> SPOUSE_CELL_LIST = Arrays.asList(CELL_SPOUSE_IDENTITY_NATIONAL_ID, CELL_SPOUSE_IDENTITY_FIRST_NAME, CELL_SPOUSE_IDENTITY_LAST_NAME, CELL_SPOUSE_IDENTITY_MIDDLE_INITIAL); @Override protected String[] getTablesToAttainLock() { return new String[]{getInfoProvider().getMainTableName()}; } @Override protected void getPutForTable(Person instance, ExecutorService service, Put put) { if (instance.getAddress() != null) { ConvertionUtils.fillWithAddress(instance.getAddress(), ADDRESS_CELL_LIST, FAMILY_SELF, put); } if (instance.getSelf() != null) { ConvertionUtils.fillWithBasicIdentity(instance.getSelf(), SELF_CELL_LIST, FAMILY_SELF, put); } if (instance.getFather() != null) { ConvertionUtils.fillWithBasicIdentity(instance.getFather(), FATHER_CELL_LIST, FAMILY_SELF, put); } if (instance.getMother() != null) { ConvertionUtils.fillWithBasicIdentity(instance.getMother(), MOTHER_CELL_LIST, FAMILY_SELF, put); } if (instance.getSpouse() != null) { ConvertionUtils.fillWithBasicIdentity(instance.getSpouse(), SPOUSE_CELL_LIST, FAMILY_SELF, put); } if (StringUtils.isNotBlank(instance.getPrimaryEmail())) { put.add(FAMILY_SELF, CELL_PRIMARY_EMAIL, Bytes.toBytes(instance.getPrimaryEmail())); } if (StringUtils.isNotBlank(instance.getSecondaryEmail())) { put.add(FAMILY_SELF, CELL_SECONDARY_EMAIL, Bytes.toBytes(instance.getSecondaryEmail())); } if (StringUtils.isNotBlank(instance.getPhoneNumber())) { put.add(FAMILY_SELF, CELL_PHONE_NUMBER, Bytes.toBytes(instance.getPhoneNumber())); } if (StringUtils.isNotBlank(instance.getCellPhoneNumber())) { put.add(FAMILY_SELF, CELL_CELL_PHONE_NUMBER, Bytes.toBytes(instance.getCellPhoneNumber())); } if (StringUtils.isNotBlank(instance.getFaxNumber())) { put.add(FAMILY_SELF, CELL_FAX_NUMBER, Bytes.toBytes(instance.getFaxNumber())); } if (instance.getBirthDay() != null) { put.add(FAMILY_SELF, CELL_DOB, Utils.toBytes(instance.getBirthDay())); } } @Override protected void getDeleteForTable(Person instance, ExecutorService service, Delete put) { // No need to do anything } @Override public Person rowsToObject(Result startRow, ExecutorService executorService) { try { Person person = new Person(); person.setId(getInfoProvider().getIdFromRowId(startRow.getRow())); person.setAddress(ConvertionUtils.formAddress(startRow, FAMILY_SELF, ADDRESS_CELL_LIST)); person.setSelf(ConvertionUtils.formBasicIdentity(startRow, FAMILY_SELF, SELF_CELL_LIST)); person.setFather(ConvertionUtils.formBasicIdentity(startRow, FAMILY_SELF, FATHER_CELL_LIST)); person.setMother(ConvertionUtils.formBasicIdentity(startRow, FAMILY_SELF, MOTHER_CELL_LIST)); person.setSpouse(ConvertionUtils.formBasicIdentity(startRow, FAMILY_SELF, SPOUSE_CELL_LIST)); if (startRow.getValue(FAMILY_SELF, CELL_PRIMARY_EMAIL) != null) { person.setPrimaryEmail(Bytes.toString(startRow.getValue(FAMILY_SELF, CELL_PRIMARY_EMAIL))); } if (startRow.getValue(FAMILY_SELF, CELL_SECONDARY_EMAIL) != null) { person.setSecondaryEmail(Bytes.toString(startRow.getValue(FAMILY_SELF, CELL_SECONDARY_EMAIL))); } if (startRow.getValue(FAMILY_SELF, CELL_PHONE_NUMBER) != null) { person.setPhoneNumber(Bytes.toString(startRow.getValue(FAMILY_SELF, CELL_PHONE_NUMBER))); } if (startRow.getValue(FAMILY_SELF, CELL_CELL_PHONE_NUMBER) != null) { person.setCellPhoneNumber(Bytes.toString(startRow.getValue(FAMILY_SELF, CELL_CELL_PHONE_NUMBER))); } if (startRow.getValue(FAMILY_SELF, CELL_FAX_NUMBER) != null) { person.setFaxNumber(Bytes.toString(startRow.getValue(FAMILY_SELF, CELL_FAX_NUMBER))); } if (startRow.getValue(FAMILY_SELF, CELL_DOB) != null) { person.setBirthDay(Utils.toDate(startRow.getValue(FAMILY_SELF, CELL_DOB))); } return person; } catch (Exception ex) { logger.error("Could not form person", ex); return null; } } }