/*********************************
 * DescribeShape.java
 * Uses the NVS shapefile library
 *  to read the specified shapefile
 *  and then display its points,
 *  records, type, and bouding box.
 *
 *********************************/

import com.nvs.shapefile.*;
import java.io.*;
import java.util.*;

public class DescribeShape
{
	private static String strFilename;
	
	public static void main(String args[])
	{
		if(args.length < 1)
		{
			System.out.println("Usage: DescribeShape <shapefile>");
			return;
		}
		
		strFilename = args[0];
		
		new DescribeShape();
	}
	
	public DescribeShape()
	{
		Shapefile shp = null;
		try
		{
			shp = new Shapefile(strFilename);
		}
		catch(FileNotFoundException e)
		{
			System.err.println(e.getMessage());
		}
		catch(IOException e)
		{
			System.err.println(e.getMessage());
		}
		
		System.out.println("Type: " + shp.getType());
		Iterator itrShapeObjects = shp.getShapeObjects().iterator();
		while(itrShapeObjects.hasNext())
		{
			ShapeObject obj = (ShapeObject)itrShapeObjects.next();
			System.out.println("Shape object: type " + obj.getType());
			System.out.println("\tBoundingBox");
			if(obj.getType() != Shapefile.SHAPETYPE_POINT)
			{
				BoundingBox box = obj.getBoundingBox();
				System.out.println("\t\tXmin: \t" + box.getXMin());
				System.out.println("\t\tXmax: \t" + box.getXMax());
				System.out.println("\t\tYmin: \t" + box.getYMin());
				System.out.println("\t\tYmax: \t" + box.getYMax());
				
			}
			Iterator itrPoints = obj.getPoints().iterator();
			int i = 0;
			while(itrPoints.hasNext())
			{
				Point pt = (Point)itrPoints.next();
				System.out.println(i + ":\t\tx: " + pt.getX() + " y: " + pt.getY());	
				i++;
			}
			
			System.out.println("\trecords: ");
			Record rec = obj.getRecord();
			Iterator itrFields = rec.getFields().iterator();
			while(itrFields.hasNext())
			{
				RecordField rf = (RecordField)itrFields.next();
				System.out.println("\t\tname: " + rf.getName() + "\tvalue: " + rf.getValue());
			}
		}
	}
}