步骤 2:提供复制器实现

复制器实现应为上一节中描述的三种方法提供实现。这些方法应将动态证据数据转换为适于写入旧数据库表的数据,并为此证据类型更新旧数据库表。

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