@Override public SubStrategy[] getSubStrategies() { // for these substrategies we need to replace the last parent strategy's // hierarchical index strategy with the underlying substrategy index // strategy final SubStrategy[] subStrategies = firstHierarchicalStrategy.getSubStrategies(); final SubStrategy[] retVal = new SubStrategy[subStrategies.length]; for (int i = 0; i < subStrategies.length; i++) { NumericIndexStrategy currentStrategyToBeReplaced = firstHierarchicalStrategy; NumericIndexStrategy currentStrategyReplacement = subStrategies[i].getIndexStrategy(); for (int j = parentStrategies.size() - 1; j >= 0; j--) { // traverse parents in reverse order final CompoundIndexStrategy parent = parentStrategies.get(j); if (parent.getPrimarySubStrategy().equals(currentStrategyToBeReplaced)) { // replace primary currentStrategyReplacement = new CompoundIndexStrategy( currentStrategyReplacement, parent.getSecondarySubStrategy()); } else { // replace secondary currentStrategyReplacement = new CompoundIndexStrategy(parent.getPrimarySubStrategy(), currentStrategyReplacement); } currentStrategyToBeReplaced = parent; } retVal[i] = new SubStrategy(currentStrategyReplacement, subStrategies[i].getPrefix()); } return retVal; }
@Override public SubStrategy[] getSubStrategies() { final SubStrategy[] subStrategies = new SubStrategy[orderedSfcs.length]; for (int sfcIndex = 0; sfcIndex < orderedSfcs.length; sfcIndex++) { final byte tierId = orderedSfcIndexToTierId.get(sfcIndex); subStrategies[sfcIndex] = new SubStrategy( new SingleTierSubStrategy(orderedSfcs[sfcIndex], baseDefinitions, tierId), new byte[] {tierId}); } return subStrategies; }