package com.linkedin.cubert.examples; import java.io.IOException; import java.util.Map; import org.apache.pig.data.Tuple; import org.codehaus.jackson.JsonNode; import com.linkedin.cubert.block.Block; import com.linkedin.cubert.block.BlockProperties; import com.linkedin.cubert.operator.PostCondition; import com.linkedin.cubert.operator.PreconditionException; import com.linkedin.cubert.operator.PreconditionExceptionType; import com.linkedin.cubert.operator.TupleOperator; import com.linkedin.cubert.utils.JsonUtils; public class ForceSortedOrder implements TupleOperator { private Block block; @Override public void setInput(Map<String, Block> input, JsonNode json, BlockProperties props) throws IOException, InterruptedException { block = input.values().iterator().next(); } @Override public Tuple next() throws IOException, InterruptedException { return block.next(); } @Override public PostCondition getPostCondition(Map<String, PostCondition> preConditions, JsonNode json) throws PreconditionException { PostCondition condition = preConditions.values().iterator().next(); JsonNode args = json.get("args"); if (args == null || !args.has("sortKeys")) throw new PreconditionException(PreconditionExceptionType.INVALID_CONFIG, "Missing 'sortKeys' parameter"); String[] sortKeys = JsonUtils.getText(args, "sortKeys").split(","); return new PostCondition(condition.getSchema(), condition.getPartitionKeys(), sortKeys); } }