Revision 1160
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