public PRMSAnimationShapefileAttributeJoiningReader(
     ShapefileAttributeReader delegate,
     PRMSAnimationFileMetaData animationFileMetaData,
     int shapefileJoinAttributeIndex,
     int animationJoinValueOffset,
     int timeStepIndex)
     throws IOException {
   super(hack(delegate), null, null); // lame duck
   this.delegate = delegate;
   this.shapefileJoinAttributeIndex = shapefileJoinAttributeIndex;
   this.animationJoinValueOffset = animationJoinValueOffset;
   this.animationTimeStepRecordOffset =
       timeStepIndex * animationFileMetaData.getTimeStepRecordCount();
   animationRecordBuffer =
       new PRMSAnimationRecordBuffer(
           animationFileMetaData,
           animationTimeStepRecordOffset,
           animationTimeStepRecordOffset + animationFileMetaData.getTimeStepRecordCount());
   this.recordEntryDescriptors =
       animationFileMetaData.getRecordEntryDescriptors().toArray(new RecordEntryDescriptor[0]);
 }