Revision 1160

View differences:

trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/drivers/shp/DbaseFileHeaderNIO.java
65 65
import com.hardcode.gdbms.engine.data.DriverException;
66 66
import com.hardcode.gdbms.engine.instruction.SemanticException;
67 67
import com.hardcode.gdbms.engine.values.Value;
68

  
68 69
import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
70

  
69 71
import com.vividsolutions.jts.geom.Geometry;
70 72

  
71

  
72 73
import java.io.EOFException;
73 74
import java.io.IOException;
74 75

  
......
756 757

  
757 758
	/**
758 759
	 * DOCUMENT ME!
760
	 *
761
	 * @param sds DOCUMENT ME!
762
	 *
763
	 * @return DOCUMENT ME!
764
	 *
765
	 * @throws IOException DOCUMENT ME!
759 766
	 */
767
	public static DbaseFileHeaderNIO createDbaseHeader(SelectableDataSource sds)
768
		throws IOException {
769
		DbaseFileHeaderNIO header = new DbaseFileHeaderNIO();
760 770

  
761
	 public static DbaseFileHeaderNIO createDbaseHeader(SelectableDataSource sds)
762
	   throws IOException {
763
	   DbaseFileHeaderNIO header = new DbaseFileHeaderNIO();
764
	   try {
765
		for (int i = 0, ii = sds.getFieldCount(); i < ii; i++) {
766
		       //AttributeType type = featureType.getAttributeType(i);
767
		       Value value=sds.getFieldValue(0,i);
768
		       //int type = sds.getFieldType(i);
769
		       int type=getTypeValue(value);
770
		       String colName = sds.getFieldName(i);
771
		       ///int fieldLen = ((DBFDriver)sds.getDriver()).getFieldLength(i);
772
		       int fieldLen=100; //TODO aqu? el tama?o no es correcto hay que calcularlo, ahora mismo est? puesto a pi??n.
773
		       int decimales=5;
774
		       //  if (fieldLen <= 0) {
775
		     //       fieldLen = 255;
776
		     //   }
777
		       // @todo respect field length
778
		       switch (type) {
779
		       	   case (Value.DOUBLE):
780
		           case (Value.INTEGER):
781
		           case (Value.DECIMAL):
782
		               header.addColumn(colName, 'N', Math.min(fieldLen, 10), decimales);
783
		               break;
784
		           case (Value.DATE):
785
		               header.addColumn(colName, 'D', fieldLen, 0);
786
		               break;
787
		           case (Value.BOOLEAN):
788
		               header.addColumn(colName, 'L', 1, 0);
789
		               break;
790
		           case (Value.STRING):
791
		               header.addColumn(colName, 'C', Math.min(254, fieldLen), 0);
792
		       }
793
		   }
794
	} catch (DriverException e) {
795
		e.printStackTrace();
796
	} catch (SemanticException e) {
797
		e.printStackTrace();
771
		try {
772
			for (int i = 0, ii = sds.getFieldCount(); i < ii; i++) {
773
				//AttributeType type = featureType.getAttributeType(i);
774
				Value value = sds.getFieldValue(0, i);
775

  
776
				//int type = sds.getFieldType(i);
777
				int type = getTypeValue(value);
778
				String colName = sds.getFieldName(i);
779

  
780
				///int fieldLen = ((DBFDriver)sds.getDriver()).getFieldLength(i);
781
				int fieldLen = 100; //TODO aqu? el tama?o no es correcto hay que calcularlo, ahora mismo est? puesto a pi??n.
782
				int decimales = 5;
783

  
784
				//  if (fieldLen <= 0) {
785
				//       fieldLen = 255;
786
				//   }
787
				// @todo respect field length
788
				switch (type) {
789
					case (Value.DOUBLE):
790
					case (Value.INTEGER):
791
					case (Value.DECIMAL):
792
						header.addColumn(colName, 'N', Math.min(fieldLen, 10),
793
							decimales);
794

  
795
						break;
796

  
797
					case (Value.DATE):
798
						header.addColumn(colName, 'D', fieldLen, 0);
799

  
800
						break;
801

  
802
					case (Value.BOOLEAN):
803
						header.addColumn(colName, 'L', 1, 0);
804

  
805
						break;
806

  
807
					case (Value.STRING):
808
						header.addColumn(colName, 'C', Math.min(254, fieldLen),
809
							0);
810
				}
811
			}
812
		} catch (DriverException e) {
813
			e.printStackTrace();
814
		} catch (SemanticException e) {
815
			e.printStackTrace();
816
		}
817

  
818
		return header;
798 819
	}
799
	   return header;
800
	   } 
801
	 private static int getTypeValue(Value value) throws SemanticException{
802
    	if (value.getClass().getName().equals("com.hardcode.gdbms.engine.values.BooleanValue"))
803
    		return Value.BOOLEAN;
804
    	if (value.getClass().getName().equals("com.hardcode.gdbms.engine.values.DateValue"))
805
    		return Value.DATE;
806
    	if (value.getClass().getName().equals("com.hardcode.gdbms.engine.values.DoubleValue"))
807
    		return Value.DOUBLE;
808
    	if (value.getClass().getName().equals("com.hardcode.gdbms.engine.values.FloatValue"))
809
    		return Value.FLOAT;
810
    	if (value.getClass().getName().equals("com.hardcode.gdbms.engine.values.IntValue"))
811
    		return Value.INTEGER;
812
    	if (value.getClass().getName().equals("com.hardcode.gdbms.engine.values.LongValue"))
813
    		return Value.LONG;
814
    	if (value.getClass().getName().equals("com.hardcode.gdbms.engine.values.StringValue"))
815
    		return Value.STRING;
816
    // default:
817
        throw new SemanticException("Unexpected className in getTypeValue (GDBMS)");
818
    }
820

  
819 821
	/**
822
	 * DOCUMENT ME!
823
	 *
824
	 * @param value DOCUMENT ME!
825
	 *
826
	 * @return DOCUMENT ME!
827
	 *
828
	 * @throws SemanticException DOCUMENT ME!
829
	 */
830
	private static int getTypeValue(Value value) throws SemanticException {
831
		if (value.getClass().getName().equals("com.hardcode.gdbms.engine.values.BooleanValue")) {
832
			return Value.BOOLEAN;
833
		} else if (value.getClass().getName().equals("com.hardcode.gdbms.engine.values.DateValue")) {
834
			return Value.DATE;
835
		} else if (value.getClass().getName().equals("com.hardcode.gdbms.engine.values.DoubleValue")) {
836
			return Value.DOUBLE;
837
		} else if (value.getClass().getName().equals("com.hardcode.gdbms.engine.values.FloatValue")) {
838
			return Value.FLOAT;
839
		} else if (value.getClass().getName().equals("com.hardcode.gdbms.engine.values.IntValue")) {
840
			return Value.INTEGER;
841
		} else if (value.getClass().getName().equals("com.hardcode.gdbms.engine.values.LongValue")) {
842
			return Value.LONG;
843
		} else if (value.getClass().getName().equals("com.hardcode.gdbms.engine.values.StringValue")) {
844
			return Value.STRING;
845
		} else if (value.getClass().getName().equals("com.hardcode.gdbms.engine.values.NullValue")) {
846
			return Value.NULL;
847
		}
848

  
849
		// default:
850
		throw new SemanticException(
851
			"Unexpected className in getTypeValue (GDBMS)");
852
	}
853

  
854
	/**
820 855
	 * Class for holding the information assicated with a record.
821 856
	 */
822 857
	class DbaseField {

Also available in: Unified diff