Schritt 2: Bereitstellen einer Replikatorimplementierung

Die Replikatorimplementierung sollte Implementierungen für die drei im vorherigen Abschnitt beschriebenen Methoden bereitstellen. Diese Methoden sollten sicherstellen, dass die Daten von dynamischen Angaben in Daten konvertiert werden, die in die älteren Datenbanktabellen geschrieben werden können, und dass die älteren Tabellen für diesen Angabentyp aktualisiert werden.

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