public List<List<String>> buildPartitionFilters(List<PartitionValueFilter> partitionValueFilters,PartitionValueFilter standalonePartitionValueFilter,BusinessObjectFormatKey businessObjectFormatKey,Integer businessObjectDataVersion,List<String> storageNames,String storagePlatformType,String excludedStoragePlatformType,BusinessObjectFormatEntity businessObjectFormatEntity){
  List<PartitionValueFilter> partitionValueFiltersToProcess=getPartitionValuesToProcess(partitionValueFilters,standalonePartitionValueFilter);
  Map<Integer,List<String>> partitionValues=new HashMap<>();
  for (int i=0; i < BusinessObjectDataEntity.MAX_SUBPARTITIONS + 1; i++) {
    partitionValues.put(i,NULL_VALUE_LIST);
  }
  for (  PartitionValueFilter partitionValueFilter : partitionValueFiltersToProcess) {
    String partitionKey=StringUtils.isNotBlank(partitionValueFilter.getPartitionKey()) ? partitionValueFilter.getPartitionKey() : businessObjectFormatEntity.getPartitionKey();
    int partitionColumnPosition=getPartitionColumnPosition(partitionKey,businessObjectFormatEntity);
    List<String> uniqueAndSortedPartitionValues=getPartitionValues(partitionValueFilter,partitionKey,partitionColumnPosition,businessObjectFormatKey,businessObjectDataVersion,storageNames,storagePlatformType,excludedStoragePlatformType,businessObjectFormatEntity);
    List<String> previousPartitionValues=partitionValues.put(partitionColumnPosition - 1,uniqueAndSortedPartitionValues);
    if (!NULL_VALUE_LIST.equals(previousPartitionValues)) {
      throw new IllegalArgumentException("Partition value filters specify duplicate partition columns.");
    }
  }
  List<String[]> crossProductResult=getCrossProduct(partitionValues);
  List<List<String>> partitionFilters=new ArrayList<>();
  for (  String[] crossProductRow : crossProductResult) {
    partitionFilters.add(Arrays.asList(crossProductRow));
  }
  return partitionFilters;
}

public List < List < String > > buildPartitionFilters ( List < PartitionValueFilter > partitionValueFilters , PartitionValueFilter standalonePartitionValueFilter , BusinessObjectFormatKey businessObjectFormatKey , Integer businessObjectDataVersion , List < String > storageNames , String storagePlatformType , String excludedStoragePlatformType , BusinessObjectFormatEntity businessObjectFormatEntity ) { List < PartitionValueFilter > partitionValueFiltersToProcess = getPartitionValuesToProcess ( partitionValueFilters , standalonePartitionValueFilter ) ; Map < Integer , List < String > > partitionValues = new HashMap < > ( ) ; for ( int i = 0 ; i < BusinessObjectDataEntity . MAX_SUBPARTITIONS + 1 ; i ++ ) { partitionValues . put ( i , NULL_VALUE_LIST ) ; } for ( PartitionValueFilter partitionValueFilter : partitionValueFiltersToProcess ) { String partitionKey = StringUtils . isNotBlank ( partitionValueFilter . getPartitionKey ( ) ) ? partitionValueFilter . getPartitionKey ( ) : businessObjectFormatEntity . getPartitionKey ( ) ; int partitionColumnPosition = getPartitionColumnPosition ( partitionKey , businessObjectFormatEntity ) ; List < String > uniqueAndSortedPartitionValues = getPartitionValues ( partitionValueFilter , partitionKey , partitionColumnPosition , businessObjectFormatKey , businessObjectDataVersion , storageNames , storagePlatformType , excludedStoragePlatformType , businessObjectFormatEntity ) ; List < String > previousPartitionValues = partitionValues . put ( partitionColumnPosition - 1 , uniqueAndSortedPartitionValues ) ; if ( ! NULL_VALUE_LIST . equals ( previousPartitionValues ) ) { throw new IllegalArgumentException ( "Partition value filters specify duplicate partition columns." ) ; } } List < String [ ] > crossProductResult = getCrossProduct ( partitionValues ) ; List < List < String > > partitionFilters = new ArrayList < > ( ) ; for ( String [ ] crossProductRow : crossProductResult ) { partitionFilters . add ( Arrays . asList ( crossProductRow ) ) ; } return partitionFilters ; }
build partition filters based on the specified partition value filters . this method also validates the partition value filters ( including partition keys ) against the business object format schema . when request contains multiple partition value filters , the system will check business object data availability for n - fold cartesian product of the partition values specified , where n is a number of partition value filters ( partition value sets ) .
