001: package com.avaje.util.seedgen;
002:
003: import jxl.Cell;
004: import jxl.CellType;
005:
006: public class XlSeedDataColumn {
007:
008: String name;
009:
010: int maxDataWidth;
011:
012: int spreadSheetColumnIndex;
013:
014: CellType baseType = CellType.EMPTY;
015:
016: boolean isExplicitType = false;
017:
018: int nullDataWidth = 4;
019:
020: String now = "now";
021: String today = "today";
022:
023: public String toString() {
024: return name + " celltype:" + baseType + " maxDataWidth:"
025: + maxDataWidth;
026: }
027:
028: public void containsCell(Cell cell) {
029:
030: String contents = cell.getContents();
031: int width = contents.length();
032: if (width == 0) {
033: width = nullDataWidth;
034: }
035: if (width > maxDataWidth) {
036: maxDataWidth = width;
037: }
038:
039: if (isExplicitType) {
040: return;
041: }
042: CellType type = cell.getType();
043:
044: if (type.equals(CellType.EMPTY)) {
045: // ignore empty cells for setting datatype
046: return;
047: }
048: //String debug = name+" row["+cell.getRow()+"]col["+cell.getColumn()+"]["+type+"]";
049: //System.out.println(debug);
050:
051: if (baseType.equals(type)) {
052: return;
053: }
054: if (type.equals(CellType.LABEL)) {
055: if (contents.equals(now) || contents.equals(today)) {
056: //ignore this as special cases for Date types
057: return;
058: }
059: baseType = CellType.LABEL;
060: return;
061: }
062: if (baseType.equals(CellType.LABEL)) {
063: // label is the most generic type
064: return;
065: }
066: baseType = type;
067: //CellType.DATE, CellType.BOOLEAN,CellType.NUMBER
068: }
069:
070: public CellType getBaseCellType() {
071: return baseType;
072: }
073:
074: public int getMaxDataWidth() {
075: return maxDataWidth;
076: }
077:
078: public void setMaxDataWidth(int maxDataWidth) {
079: this .maxDataWidth = maxDataWidth;
080: }
081:
082: public int getSpreadSheetColumnIndex() {
083: return spreadSheetColumnIndex;
084: }
085:
086: public void setSpreadSheetColumnIndex(int spreadSheetColumnIndex) {
087: this .spreadSheetColumnIndex = spreadSheetColumnIndex;
088: }
089:
090: public String getName() {
091: return name;
092: }
093:
094: public void setName(String name) {
095: this .name = name;
096: }
097:
098: public boolean isTypeNumeric() {
099: return baseType.equals(CellType.NUMBER);
100: }
101:
102: public boolean isTypeString() {
103: return baseType.equals(CellType.LABEL);
104: }
105:
106: public boolean isTypeDate() {
107: return (maxDataWidth <= 11 && baseType.equals(CellType.DATE));
108: }
109:
110: public boolean isTypeTimestamp() {
111: return (maxDataWidth > 11 && baseType.equals(CellType.DATE));
112: }
113:
114: public void setDatatypeCode(String datatypeCode) {
115: if (datatypeCode == null || datatypeCode.trim().length() == 0) {
116: return;
117: }
118: isExplicitType = true;
119: if (datatypeCode.startsWith("s")) {
120: baseType = CellType.LABEL;
121: return;
122: }
123: if (datatypeCode.startsWith("v")) {
124: baseType = CellType.LABEL;
125: return;
126: }
127: if (datatypeCode.startsWith("n")) {
128: baseType = CellType.NUMBER;
129: return;
130: }
131: if (datatypeCode.startsWith("d")) {
132: baseType = CellType.DATE;
133: return;
134: }
135: // if (datatypeCode.equalsIgnoreCase("time")){
136: // datatype = Types.TIME;
137: // return;
138: // }
139: if (datatypeCode.startsWith("t")) {
140: baseType = CellType.DATE;
141: return;
142: }
143: if (datatypeCode.startsWith("r")) {
144: baseType = CellType.NUMBER;
145: return;
146: }
147: throw new RuntimeException("Unknown type code[" + datatypeCode
148: + "] for column [" + name + "]");
149: }
150: }
|