The facade operation calls the evidence service layer implementation.
// __________________________________________________________
/**
 * Creates an Asset evidence record.
 *
 * @param dtls Details of the new evidence record to be created.
 *
 * @return The details of the created record.
 */
 public ReturnEvidenceDetails createAssetEvidence(
  AssetEvidenceDetails dtls)
  throws AppException, InformationalException {
  // set the informational manager for the transaction
  TransactionInfo.setInformationalManager();
  // Asset evidence manipulation object
  Asset evidenceObj = AssetFactory.newInstance();
  // return object
  ReturnEvidenceDetails createdEvidenceDetails =
    new ReturnEvidenceDetails();
  // create the Asset record and populate the return details
  createdEvidenceDetails =
    evidenceObj.createAssetEvidence(dtls);
  createdEvidenceDetails.warnings = 
    EvidenceControllerFactory.newInstance().getWarnings();    
  return createdEvidenceDetails;
}
These overloaded service layer operations call the Evidence Controller infrastructure function for inserting evidence.
// __________________________________________________________
/**
 * Creates a Asset record.
 *
 * @param dtls Contains Asset evidence record creation details.
 *
 * @return the new evidence ID and warnings.
 */
public ReturnEvidenceDetails createAssetEvidence(
  AssetEvidenceDetails dtls)  
  throws AppException,InformationalException {
  return createAssetEvidence(dtls, null, null, false);
}
  
  
// __________________________________________________________
/**
 * Creates a Asset record.
 *
 * @param dtls Contains Asset evidence record creation details.
 *
 * @param sourceEvidenceDescriptorDtls If this function is called 
 * during evidence sharing, this parameter will be non-null and 
 * it represents the header of the evidence record being shared 
 * (i.e. the source evidence record)
 *
 * @param targetCase If this function is called during evidence 
 * sharing, this parameter will be non-null and it represents the 
 * case the evidence is being shared with.
 *
 * @param sharingInd A flag to determine if the function is 
 * called in evidence sharing mode. If false, the function is 
 * being called as part of a regular create.
 *
 * @return the new evidence ID and warnings.
 */
public ReturnEvidenceDetails createAssetEvidence(
  AssetEvidenceDetails dtls,
  EvidenceDescriptorDtls sourceEvidenceDescriptorDtls,
  CaseHeaderDtls targetCase, boolean sharingInd)
  throws AppException,InformationalException {
  // validate the mandatory fields
  validateMandatoryDetails(dtls);
  EvidenceControllerInterface evidenceControllerObj =
    (EvidenceControllerInterface) 
      EvidenceControllerFactory.newInstance(); 
  EvidenceDescriptorInsertDtls evidenceDescriptorInsertDtls =
    new EvidenceDescriptorInsertDtls();
  ReturnEvidenceDetails createdEvidence = 
    new ReturnEvidenceDetails();
  if (sharingInd) {
    EvidenceDescriptorDtls sharedDescriptorDtls =
      evidenceControllerObj.shareEvidence(
        sourceEvidenceDescriptorDtls,
        targetCase);   
    // Return the evidence ID and warnings    
    createdEvidence.evidenceKey.evidenceID = 
      sharedDescriptorDtls.relatedID;
    createdEvidence.evidenceKey.evType = 
      sharedDescriptorDtls.evidenceType;
  } else {    
    // As there is no participant associated with this evidence 
    // we must retrieve the case participant to set the evidence 
    // descriptor participant.
    CaseHeaderKey caseHeaderKey = new CaseHeaderKey();
    caseHeaderKey.caseID = dtls.caseIDKey.caseID;
    evidenceDescriptorInsertDtls.participantID = 
      CaseHeaderFactory.newInstance().readCaseParticipantDetails(
        caseHeaderKey).concernRoleID;
    // Evidence descriptor details
    evidenceDescriptorInsertDtls.caseID = dtls.caseIDKey.caseID;
    evidenceDescriptorInsertDtls.evidenceType =
      CASEEVIDENCE.ASSET;
    evidenceDescriptorInsertDtls.receivedDate =
      dtls.descriptor.receivedDate;
    // Upon creation, the change reason should be Initial
    evidenceDescriptorInsertDtls.changeReason = 
      EVIDENCECHANGEREASON.INITIAL;
    // Evidence Interface details
    EIEvidenceInsertDtls eiEvidenceInsertDtls = 
      new EIEvidenceInsertDtls();
    eiEvidenceInsertDtls.descriptor.assign(
      evidenceDescriptorInsertDtls);
    eiEvidenceInsertDtls.evidenceObject = dtls.dtls;
    // Insert the evidence
    EIEvidenceKey eiEvidenceKey =
      evidenceControllerObj.insertEvidence(eiEvidenceInsertDtls);
    // Return the evidence ID and warnings    
    createdEvidence.evidenceKey.evidenceID = 
      eiEvidenceKey.evidenceID;
    createdEvidence.evidenceKey.evType = 
      eiEvidenceKey.evidenceType;
    createdEvidence.warnings = 
      evidenceControllerObj.getWarnings();
  }
  return createdEvidence;
}