public Shard unmarshall(JsonUnmarshallerContext context) throws Exception { Shard shard = new Shard(); int originalDepth = context.getCurrentDepth(); String currentParentElement = context.getCurrentParentElement(); int targetDepth = originalDepth + 1; JsonToken token = context.currentToken; if (token == null) token = context.nextToken(); if (token == VALUE_NULL) return null; while (true) { if (token == null) break; if (token == FIELD_NAME || token == START_OBJECT) { if (context.testExpression("ShardId", targetDepth)) { context.nextToken(); shard.setShardId(StringJsonUnmarshaller.getInstance().unmarshall(context)); } if (context.testExpression("ParentShardId", targetDepth)) { context.nextToken(); shard.setParentShardId(StringJsonUnmarshaller.getInstance().unmarshall(context)); } if (context.testExpression("AdjacentParentShardId", targetDepth)) { context.nextToken(); shard.setAdjacentParentShardId(StringJsonUnmarshaller.getInstance().unmarshall(context)); } if (context.testExpression("HashKeyRange", targetDepth)) { context.nextToken(); shard.setHashKeyRange(HashKeyRangeJsonUnmarshaller.getInstance().unmarshall(context)); } if (context.testExpression("SequenceNumberRange", targetDepth)) { context.nextToken(); shard.setSequenceNumberRange( SequenceNumberRangeJsonUnmarshaller.getInstance().unmarshall(context)); } } else if (token == END_ARRAY || token == END_OBJECT) { if (context.getLastParsedParentElement() == null || context.getLastParsedParentElement().equals(currentParentElement)) { if (context.getCurrentDepth() <= originalDepth) break; } } token = context.nextToken(); } return shard; }
/** * Helper method to create a list of shards (which can then be used to generate data files). * * @param numShards Number of shards * @param shardIdPrefix Prefix for the shardIds * @param startingSequenceNumber Starting sequence number for all the shards * @return List of shards (with no reshard events). */ public static List<Shard> createShardList( int numShards, String shardIdPrefix, BigInteger startingSequenceNumber) { List<Shard> shards = new ArrayList<Shard>(numShards); SequenceNumberRange sequenceNumberRange = new SequenceNumberRange(); sequenceNumberRange.setStartingSequenceNumber(startingSequenceNumber.toString()); sequenceNumberRange.setEndingSequenceNumber(null); BigInteger perShardHashKeyRange = KinesisLocalFileProxy.MAX_HASHKEY_VALUE.divide(new BigInteger(Integer.toString(numShards))); BigInteger hashKeyRangeStart = new BigInteger("0"); for (int i = 0; i < numShards; i++) { Shard shard = new Shard(); shard.setShardId(shardIdPrefix + i); shard.setSequenceNumberRange(sequenceNumberRange); BigInteger hashKeyRangeEnd = hashKeyRangeStart.add(perShardHashKeyRange); HashKeyRange hashKeyRange = new HashKeyRange(); hashKeyRange.setStartingHashKey(hashKeyRangeStart.toString()); hashKeyRange.setEndingHashKey(hashKeyRangeEnd.toString()); shards.add(shard); } return shards; }