/** * Verifies that the record's shape type matches the expected one, typically that of the * shapefile. All non-null records in a Shapefile must be of the same type. Throws an exception if * the types do not match and the shape type is not <code>{@link Shapefile#SHAPE_NULL}</code>. * Records of type <code>SHAPE_NULL</code> are always valid, and may appear in any Shapefile. * * <p>For details, see the ESRI Shapefile specification at <a * href="http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf"/>, pages 4 and 5. * * @param shapefile the shapefile. * @param shapeType the record's shape type. * @throws WWRuntimeException if the shape types do not match. * @throws IllegalArgumentException if the specified shape type is null. */ protected void validateShapeType(Shapefile shapefile, String shapeType) { if (shapeType == null) { String message = Logging.getMessage("nullValue.ShapeType"); Logging.logger().severe(message); throw new IllegalArgumentException(message); } if (!shapeType.equals(shapefile.getShapeType()) && !shapeType.equals(Shapefile.SHAPE_NULL)) { String message = Logging.getMessage("SHP.UnsupportedShapeType", shapeType); Logging.logger().severe(message); throw new WWRuntimeException(message); } }
/** * Reads and parses the contents of a shapefile record from a specified buffer. The buffer's * current position must be the start of the record and will be the start of the next record when * the constructor returns. * * @param shapefile the containing {@link Shapefile}. * @param buffer the shapefile record {@link java.nio.ByteBuffer} to read from. */ protected void readFromBuffer(Shapefile shapefile, ByteBuffer buffer) { // Read record number and record length - big endian. buffer.order(ByteOrder.BIG_ENDIAN); this.recordNumber = buffer.getInt(); this.contentLengthInBytes = buffer.getInt() * 2; // Read shape type - little endian buffer.order(ByteOrder.LITTLE_ENDIAN); int type = buffer.getInt(); String shapeType = shapefile.getShapeType(type); this.validateShapeType(shapefile, shapeType); this.shapeType = shapeType; this.shapeFile = shapefile; this.doReadFromBuffer(shapefile, buffer); }
/** * Indicates whether the record is a shape type containing Z values. * * @return true if the record is a type containing Z values. */ protected boolean isZType() { return Shapefile.isZType(this.getShapeType()); }