Paso 2: Proporcionar una implementación de replicador

La implementación de replicador debe proporcionar implementaciones para los tres métodos descritos en la sección anterior. Estos métodos deben convertir los datos de pruebas dinámicos en datos adecuados para grabarse en tablas de base de datos heredadas y actualizar las tablas heredadas para este tipo de pruebas.

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);
    }  
  }  
}