Step 2: Provide a Replicator Implementation

The replicator implementation should provide implementations for the three methods described in the previous section. These methods should convert the dynamic evidence data to data suitable to be written to the legacy database tables and update the legacy tables for this evidence type.

public class SampleForeignResidencyReplicatorImpl 
  implements SampleForeignResidencyReplicator {

  protected SampleForeignResidencyReplicatorImpl() {
  }
  
  public void replicateInsertEvidence(
    final EvidenceDescriptorDtls evidenceDescriptorDtls) 
    throws AppException, InformationalException {

    SampleForeignResidency sampleForeignResidencyObj = 
	  SampleForeignResidencyFactory.newInstance();
    SampleForeignResidencyDtls sampleForeignResidencyDtls = 
	  new SampleForeignResidencyDtls();
    UniqueID uniqueIDObj = UniqueIDFactory.newInstance();

    EvidenceControllerInterface evidenceControllerObj = 
      (EvidenceControllerInterface) EvidenceControllerFactory.newInstance();

    EIEvidenceKey eiEvidenceKey = new EIEvidenceKey();
    eiEvidenceKey.evidenceID = evidenceDescriptorDtls.relatedID;
    eiEvidenceKey.evidenceType = evidenceDescriptorDtls.evidenceType;
  
    EIEvidenceReadDtls eiEvidenceReadDtls = 
      evidenceControllerObj.readEvidence(eiEvidenceKey);
  
    DynamicEvidenceDataDetails dynamicEvidenceDataDetails = 
      (DynamicEvidenceDataDetails) eiEvidenceReadDtls.evidenceObject;
  
    sampleForeignResidencyDtls.countryCode = 
      dynamicEvidenceDataDetails.getAttribute("country").getValue();

    sampleForeignResidencyDtls.startDate = 
	  (Date) DynamicEvidenceTypeConverter.convert(
      dynamicEvidenceDataDetails.getAttribute("fromDate"));
  
    sampleForeignResidencyDtls.endDate = 
	  (Date) DynamicEvidenceTypeConverter.convert(
      dynamicEvidenceDataDetails.getAttribute("toDate"));
  
    sampleForeignResidencyDtls.reasonCode = 
      dynamicEvidenceDataDetails.getAttribute("reason").getValue();        

    sampleForeignResidencyDtls.concernRoleID = evidenceDescriptorDtls.participantID;           
    sampleForeignResidencyDtls.foreignResidencyID = uniqueIDObj.getNextID();
    sampleForeignResidencyDtls.statusCode = RECORDSTATUS.NORMAL;

    sampleForeignResidencyObj.insert(sampleForeignResidencyDtls);
  }

  public void replicateModifyEvidence(
    final EvidenceDescriptorDtls evidenceDescriptorDtls, 
    final EvidenceDescriptorDtls previousActiveEvidDescriptorDtls) 
    throws AppException, InformationalException {

    List<SampleForeignResidencyKey> sampleForeignResidencyKeyList = 
      new ArrayList<SampleForeignResidencyKey>();

    SampleForeignResidencyDtls sampleForeignResidencyDtls = 
	  new SampleForeignResidencyDtls();

    EvidenceControllerInterface evidenceControllerObj = 
      (EvidenceControllerInterface) EvidenceControllerFactory.newInstance();

    EIEvidenceKey eiEvidenceKey = new EIEvidenceKey();
    eiEvidenceKey.evidenceID = previousActiveEvidDescriptorDtls.relatedID;
    eiEvidenceKey.evidenceType = previousActiveEvidDescriptorDtls.evidenceType;

    EIEvidenceReadDtls eiEvidenceReadDtls = 
      evidenceControllerObj.readEvidence(eiEvidenceKey);

    DynamicEvidenceDataDetails dynamicEvidenceDataDetails = 
      (DynamicEvidenceDataDetails) eiEvidenceReadDtls.evidenceObject;

    sampleForeignResidencyDtls.countryCode = 
      dynamicEvidenceDataDetails.getAttribute("country").getValue();

    sampleForeignResidencyDtls.startDate = 
	  (Date) DynamicEvidenceTypeConverter.convert(
      dynamicEvidenceDataDetails.getAttribute("fromDate"));

    sampleForeignResidencyDtls.endDate = 
	  (Date) DynamicEvidenceTypeConverter.convert(
      dynamicEvidenceDataDetails.getAttribute("toDate"));

    sampleForeignResidencyDtls.reasonCode = 
	  dynamicEvidenceDataDetails.getAttribute("reason").getValue();    

    SampleForeignResidency sampleForeignResidencyObj = 
	  SampleForeignResidencyFactory.newInstance();

    SampleForeignResidencyReadMultiKey sampleForeignResidencyReadMultiKey = 
      new SampleForeignResidencyReadMultiKey();
    sampleForeignResidencyReadMultiKey.concernRoleID = 
	  previousActiveEvidDescriptorDtls.participantID;

    SampleForeignResidencyReadMultiDtlsList sampleForeignResidencyReadMultiDtlsList = 
      sampleForeignResidencyObj.searchByConcernRole(sampleForeignResidencyReadMultiKey);

    for (SampleForeignResidencyReadMultiDtls sampleForeignResidencyReadMultiDtls : 
	  sampleForeignResidencyReadMultiDtlsList.dtls) {

      if ((sampleForeignResidencyReadMultiDtls.countryCode.equals(
	    sampleForeignResidencyDtls.countryCode))
        && (sampleForeignResidencyReadMultiDtls.reasonCode.equals(
		sampleForeignResidencyDtls.reasonCode))) {

        SampleForeignResidencyKey sampleForeignResidencyKey = new SampleForeignResidencyKey();
        sampleForeignResidencyKey.sampleForeignResidencyID = 
		  sampleForeignResidencyReadMultiDtls.sampleForeignResidencyID;

        sampleForeignResidencyKeyList.add(sampleForeignResidencyKey);
      }
    }

    for (SampleForeignResidencyKey sampleForeignResidencyKey : sampleForeignResidencyKeyList) {

      sampleForeignResidencyDtls = new SampleForeignResidencyDtls();

      eiEvidenceKey = new EIEvidenceKey();
      eiEvidenceKey.evidenceID = evidenceDescriptorDtls.relatedID;
      eiEvidenceKey.evidenceType = evidenceDescriptorDtls.evidenceType;

      eiEvidenceReadDtls = evidenceControllerObj.readEvidence(eiEvidenceKey);

      dynamicEvidenceDataDetails = 
        (DynamicEvidenceDataDetails) eiEvidenceReadDtls.evidenceObject;

      sampleForeignResidencyDtls.countryCode = 
        dynamicEvidenceDataDetails.getAttribute("country").getValue();

      sampleForeignResidencyDtls.startDate = (Date) DynamicEvidenceTypeConverter.convert(
        dynamicEvidenceDataDetails.getAttribute("fromDate"));

      sampleForeignResidencyDtls.endDate = (Date) DynamicEvidenceTypeConverter.convert(
        dynamicEvidenceDataDetails.getAttribute("toDate"));

      sampleForeignResidencyDtls.reasonCode = 
        dynamicEvidenceDataDetails.getAttribute("reason").getValue();    

      sampleForeignResidencyDtls.concernRoleID = evidenceDescriptorDtls.participantID;

      SampleForeignResidencyDtls sampleForeignResidencyReadDtls = 
	    sampleForeignResidencyObj.read(sampleForeignResidencyKey);

      sampleForeignResidencyReadDtls.assign(sampleForeignResidencyDtls);

      sampleForeignResidencyObj.modify(sampleForeignResidencyKey, sampleForeignResidencyReadDtls);     
    }
  }

  public void replicateRemoveEvidence(
    final EvidenceDescriptorDtls evidenceDescriptorDtls) 
    throws AppException, InformationalException {

    List<SampleForeignResidencyKey> sampleForeignResidencyKeyList = 
	  new ArrayList<SampleForeignResidencyKey>();

    SampleForeignResidencyDtls sampleForeignResidencyDtls = 
	  new SampleForeignResidencyDtls();

    EvidenceControllerInterface evidenceControllerObj = 
      (EvidenceControllerInterface) EvidenceControllerFactory.newInstance();

    EIEvidenceKey eiEvidenceKey = new EIEvidenceKey();
    eiEvidenceKey.evidenceID = evidenceDescriptorDtls.relatedID;
    eiEvidenceKey.evidenceType = evidenceDescriptorDtls.evidenceType;

    EIEvidenceReadDtls eiEvidenceReadDtls = 
      evidenceControllerObj.readEvidence(eiEvidenceKey);

    DynamicEvidenceDataDetails dynamicEvidenceDataDetails = 
      (DynamicEvidenceDataDetails) eiEvidenceReadDtls.evidenceObject;

    sampleForeignResidencyDtls.countryCode = 
      dynamicEvidenceDataDetails.getAttribute("country").getValue();

    sampleForeignResidencyDtls.startDate = 
	  (Date) DynamicEvidenceTypeConverter.convert(
      dynamicEvidenceDataDetails.getAttribute("fromDate"));

    sampleForeignResidencyDtls.endDate = 
	  (Date) DynamicEvidenceTypeConverter.convert(
      dynamicEvidenceDataDetails.getAttribute("toDate"));

    sampleForeignResidencyDtls.reasonCode = 
	  dynamicEvidenceDataDetails.getAttribute("reason").getValue();    

    SampleForeignResidency sampleForeignResidencyObj = 
	  SampleForeignResidencyFactory.newInstance();

    SampleForeignResidencyReadMultiKey sampleForeignResidencyReadMultiKey = 
      new SampleForeignResidencyReadMultiKey();
    sampleForeignResidencyReadMultiKey.concernRoleID = 
	  evidenceDescriptorDtls.participantID;

    SampleForeignResidencyReadMultiDtlsList sampleForeignResidencyReadMultiDtlsList = 
      sampleForeignResidencyObj.searchByConcernRole(sampleForeignResidencyReadMultiKey);

    for (SampleForeignResidencyReadMultiDtls sampleForeignResidencyReadMultiDtls : 
	  sampleForeignResidencyReadMultiDtlsList.dtls) {

      if ((sampleForeignResidencyReadMultiDtls.countryCode.equals(
	    sampleForeignResidencyDtls.countryCode))
        && (sampleForeignResidencyReadMultiDtls.reasonCode.equals(
		sampleForeignResidencyDtls.reasonCode))) {

        SampleForeignResidencyKey sampleForeignResidencyKey = new SampleForeignResidencyKey();
        sampleForeignResidencyKey.sampleForeignResidencyID = 
		  sampleForeignResidencyReadMultiDtls.sampleForeignResidencyID;

        sampleForeignResidencyKeyList.add(sampleForeignResidencyKey);
      }
    }

    for (SampleForeignResidencyKey sampleForeignResidencyKey : sampleForeignResidencyKeyList) {

      sampleForeignResidencyDtls = sampleForeignResidencyObj.read(sampleForeignResidencyKey);
      sampleForeignResidencyDtls.statusCode = RECORDSTATUS.CANCELLED;
      sampleForeignResidencyObj.modify(sampleForeignResidencyKey, sampleForeignResidencyDtls);
    }  
  }  
}