Provide an Implementation for the Algorithm

The next step that is required to register a new algorithm is to provide the implementation for the algorithm. This implementation must implement the SamplingStrategy Interface. The SamplingStrategy Interface has one method getRandomSample. This method takes a list of case identifiers and applies a sampling strategy to the list to generate a random case sample for audit. It accepts three parameters:

The SamplingStrategy Interface can be found in the package curam.samplingstrategy.impl

Figure 1. Algorithm Implementation
/*
 * Copyright 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.samplingstrategy.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import curam.util.exception.AppException;
import curam.util.exception.InformationalException;

public class EveryNthCase implements SamplingStrategy {

  public List<Long> getRandomSample(List<Long> masterList, 
    int sampleSize, Map<String, Object> properties) 
    throws AppException, InformationalException {
      
    List<Long> randomSampleList = new ArrayList<Long>();    
    Integer n = (Integer) properties.get("n");
    int index = 0;
    
    if (n <= masterList.size()) {
      
      while (randomSampleList.size() < sampleSize) {        
        if (index + n < masterList.size()) {          
          index = index + n;        
          
          // If the element has been returned already, 
          // try the next element until one that hasn't 
          // been returned is found
          while (randomSampleList.contains(
            masterList.get(index))) {
            if (index < masterList.size() - 1) {
              index++;  
            } else {
                index = 0;
            }            
          }

          randomSampleList.add(masterList.get(index));          
        } else {          

          // Run out of elements, loop back to the 
          // start of the list
          int elementsToStartOfList = masterList.size() - index;
          index = n - elementsToStartOfList;

          // If the element has been returned already, 
          // try the next element until one that hasn't 
          // been returned is found
          while (randomSampleList.contains(
            masterList.get(index))) {
            if (index < masterList.size() - 1) {
              index++;  
            } else {
                index = 0;
            }            
          }
         
          randomSampleList.add(masterList.get(index));
        }
      }
    }
    return randomSampleList;
  }
}