Standard Evidence Interface

The Standard Evidence Interface defines the following methods which are common to both inheriting interfaces. The interface and its associated methods are shown below with the appropriate javadoc comments:

/*
 * Copyright 2005-2006,2011 Curam Software Ltd.
 * All rights reserved.
 * 
 * This software is the confidential and proprietary information
 * of Curam Software, Ltd. ("Confidential Information").  You 
 * shall not disclose such Confidential Information and shall use
 * it only in accordance with the terms of the license agreement 
 * you entered into with Curam Software.
 */
package curam.core.sl.infrastructure.impl;

import curam.core.sl.infrastructure.entity.struct
  .AttributedDateDetails;
import curam.core.sl.infrastructure.struct.EIEvidenceKey;
import curam.core.sl.infrastructure.struct.EIEvidenceKeyList;
import 
  curam.core.sl.infrastructure.struct.EIFieldsForListDisplayDtls;
import curam.core.sl.infrastructure.struct.ValidateMode;
import curam.core.struct.CaseKey;
import curam.util.exception.AppException;
import curam.util.exception.InformationalException;
import curam.util.type.Date;

/**
 * This interface is a key component of the Curam
 * Evidence Solution. Implementations hoping to manage evidence
 * via the Evidence Solution must ensure that the 
 * evidence entities contained within the solution implement the 
 * Evidence Interface. By doing this, the evidence is utilizing 
 * the Evidence Controller pattern whereby a lot of the common 
 * business functions for maintaining evidence are contained 
 * within the out-of-the-box evidence infrastructure.
 * 
 * This interface is the super interface that will be 
 * extended by other evidence interfaces that wish to provide 
 * custom functionality for that type of evidence. The methods 
 * defined on this evidence are common to any interface that 
 * extends it.
 */
public interface StandardEvidenceInterface {

  // ____________________________________________________________
  /**
   * Method for calculating case attribution dates. The 
   * calculation of evidence attribution is an integral part of a
   * evidence solution as it determines the period of 
   * time for which a piece of evidence is effective. The 
   * implementation of this function will contain the logic that 
   * derives the appropriate effective period for the evidence of
   * a particular type.
   * 
   * @param caseKey
   *          Contains a case identifier
   * @param evKey
   *          Contains the evidenceID / evidenceType pairing of 
   *          the evidence to be attributed
   * 
   * @return Case attribution details
   */
  AttributedDateDetails calcAttributionDatesForCase(
    CaseKey caseKey, EIEvidenceKey evKey) 
      throws AppException, InformationalException;

  // ____________________________________________________________
  /**
   * Retrieves a summary of evidence details which are used to 
   * populate the 'Details' column on the following evidence 
   * pages:
   *
   *  - All evidence workspace pages
   *  - Apply changes page
   *  - Apply user changes page
   *  - Approve page
   *  - Reject page
   * 
   * @param key
   *          Contains an evidenceID / evidenceType pairing
   * 
   * @return A summary of the evidence details to be displayed
   */
  EIFieldsForListDisplayDtls getDetailsForListDisplay(
    EIEvidenceKey key) 
      throws AppException, InformationalException;

  // ____________________________________________________________
  /**
   * Method to get the business end date for this evidence 
   * record.
   * 
   * @param key
   *          Contains an evidenceID / evidenceType pairing
   * 
   * @return The end date for this evidence
   */
  Date getEndDate(EIEvidenceKey evKey) throws AppException,
    InformationalException;

  // ____________________________________________________________
  /**
   * Method to get the business start date for this evidence 
   * record.
   * 
   * @param key
   *          Contains an evidenceID / evidenceType pairing
   * 
   * @return The start date for this evidence
   */
  Date getStartDate(EIEvidenceKey evKey) throws AppException,
    InformationalException;

  // ____________________________________________________________
  /**
   * Method for inserting case evidence.
   * 
   * @param dtls
   *          Custom evidence details to be inserted
   * @param parentKey
   *          Contains the evidence type of the evidence being 
   *          inserted
   * 
   * @return Contains the evidenceID / evidenceType of the 
   *         evidence inserted
   */
  EIEvidenceKey insertEvidence(
    Object dtls, EIEvidenceKey parentKey)
      throws AppException, InformationalException;

  // ____________________________________________________________
  /**
   * Method for inserting case evidence on modification. An 
   * insert on modification takes place when the record being 
   * modified is 'Active'.
   * 
   * @param dtls
   *          Evidence details to be inserted
   * @param origKey
   *          Contains the evidenceID / evidenceType pairing of  
   *          the evidence being modified
   * @param parentKey
   *          Contains the evidence type of the evidence to be 
   *          inserted
   * 
   * @return Contains the evidenceID / evidenceType of the 
   *         evidence inserted
   */
  EIEvidenceKey insertEvidenceOnModify(Object dtls, 
    EIEvidenceKey origKey, EIEvidenceKey parentKey) 
      throws AppException, InformationalException;

 // ____________________________________________________________
  /**
   * Method for modifying case evidence. This function is called
   * when 'In Edit' evidence is being modified in place.
   * 
   * @param key
   *          Contains the evidenceID / evidenceType pairing of
   *          the evidence to be modified
   * @param dtls
   *          Modified evidence details
   */
  void modifyEvidence(EIEvidenceKey key, Object dtls) 
    throws AppException, InformationalException;

  // ____________________________________________________________
  /**
   * Method for retrieving all child evidence for a specified 
   * parent
   * 
   * @param key
   *          Contains a parent evidenceID / evidenceType pairing
   * 
   * @return List of all child evidence (evidenceID / 
   *         evidenceType pairings) for the specified parent
   */
  EIEvidenceKeyList readAllByParentID(EIEvidenceKey key) 
    throws AppException, InformationalException;

  // ____________________________________________________________
  /**
   * Method for reading case evidence.
   * 
   * @param key
   *          Contains the evidenceID / evidenceType pairing of 
   *          the evidence to be read
   * 
   * @return Custom evidence details
   */
  Object readEvidence(EIEvidenceKey key) 
    throws AppException, InformationalException;

 // ____________________________________________________________
  /**
   * Method for retrieving the list of evidence to be used in
   * the validation procedure. This is based on the evidenceID /
   * evidenceType pairing passed into this function.
   *
   * If the input evidence key was that of parent evidence, then 
   * this function should return the parent and its associated 
   * 'Active' and 'In Edit' child evidence records, if they 
   * exist.
   * 
   * @param evKey
   *          Contains the evidenceID / evidenceType pairing of 
   *          the evidence being "acted upon".
   * 
   * @return List of evidenceID / evidenceType pairings to be 
   *         used in the validation procedure
   */
  EIEvidenceKeyList selectForValidation(EIEvidenceKey evKey)
    throws AppException, InformationalException;

  // ____________________________________________________________
  /**
   * Method for validating evidences based on the validate mode 
   * setting.
   * 
   * @param evKey
   *          The evidenceID / evidenceType pairing of the 
   *          evidence being "acted upon"
   * @param evKeyList
   *          The evidence hierarchy structure for the evKey 
   *          parameter. If the evKey identified the parent 
   *          evidence, the evKeyList may contain this parent and
   *          its relevant children for validation purposes
   * 
   * @param mode
   *          The validation mode (insert, modify, 
   *          validateChanges,applyChanges)
   */
  void validate(EIEvidenceKey evKey, EIEvidenceKeyList evKeyList,
    ValidateMode mode) 
      throws AppException, InformationalException;
}